自定义tablayout
来源:互联网 发布:淘宝罗汉鱼 编辑:程序博客网 时间:2024/06/05 12:05
自android 5.0发布以来,谷歌有发布的design包下的tablayout,但是需求的不同,有的时候,并不适合用这个,所以自己就自定义。
这个可以添加标题下的导航条也可不添加,可以设置根据标题文字的大小来调节该导航条的宽度。效果图所示。
这是CustomTablayout。自己通过继承HorizontalScrollView 来实现定义Tablayout
package com.demo.fuhao.customtablayout;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Handler;import android.os.Message;import android.support.v4.view.ViewPager;import android.text.TextPaint;import android.util.AttributeSet;import android.util.DisplayMetrics;import android.util.Log;import android.util.TypedValue;import android.view.Gravity;import android.view.View;import android.view.WindowManager;import android.widget.HorizontalScrollView;import android.widget.LinearLayout;import android.widget.TextView;import java.util.ArrayList;import java.util.List;/** * Created by fuhao on 2017/1/10. * 当设置indicator的长度为0时,默认自动根据标题的长度来设置indicator的长度,如果想取消indicator,可以设置。 * 目前,只能添加文字,不能添加图片。 */public class CustomTablayout extends HorizontalScrollView { private static final String TAG="CustomTablayout"; /** * tab容器 */ private TabLayout mTabLayout; /** * 正常字体颜色 */ private int TEXTNORMALCOLOR; /** * 选中字体颜色 */ private int TEXTSELECTEDCOLOR; /** * 正常字体大小 */ private float TEXTNORMALSIZE; /** * 选中字体大小 */ private float TEXTSELECTEDSIZE; /** * 背景颜色 */ private int BACKGROUNDCOLOR; /** * 指示器颜色 */ private int INDICATORCOLOR; /** * 指示器宽度(attr) */ private float INDICATORWIDTH; /** * 指示器高度(attr) */ private float INDICATORHEIGHT; /** * 是否添加指示器(attr)标题下的线条 */ private boolean ADDFORINDICATOR; /** * 是否添平均分配指示器(attr)标题下的线条 */ private boolean AVERAGEFORINDICATOR; /** * title内容 */ private List<String> mTabTitles; /** * 标题宽度 */ private int mTitleWidth; /** * 指示器宽度 */ private int mIndicatorWidth; List<Integer> integerList = new ArrayList<Integer>(); /** * 指示器高度(dp) */ private int mIndicatorHeight; /** * 默认的Tab数量 */ private static int COUNT_DEFAULT_TAB = 4; /** * 默认最大Tab可见数量 */ private static final int COUNT_DEFAULT_MAX_TAB = 6; /** * tab数量 */ private int mTabVisibleCount = COUNT_DEFAULT_TAB; /** * 初始时,指示器的偏移量 */ private int mInitTranslationX; /** * 滑动时指示器的偏移量 */ private float mTranslationX; /** * 指示器的宽度为单个Tab的1/3 */ private static float RADIO_TRIANGEL = 1.0f / 3; /** * ViewPager */ private ViewPager mViewPager; /** * Tab是否被点击 */ private boolean isClick; public CustomTablayout(Context context) { this(context, null); } public CustomTablayout(Context context, AttributeSet attrs) { super(context, attrs, 0); //读取xml中 if (attrs != null) {TypedArray typedArray = context.obtainStyledAttributes (attrs,R.styleable.CustomTablayout); TEXTNORMALCOLOR = typedArray.getColor (R.styleable.CustomTablayout_textNormalColor, 0x80FFFFFF); TEXTSELECTEDCOLOR = typedArray.getColor (R.styleable.CustomTablayout_textSelectedColor, 0xFFFFFFFF); TEXTNORMALSIZE = typedArray.getDimension (R.styleable.CustomTablayout_textNormalSize, 13); TEXTSELECTEDSIZE = typedArray.getDimension (R.styleable.CustomTablayout_textSelectedSize, 15); BACKGROUNDCOLOR = typedArray.getColor (R.styleable.CustomTablayout_backGroundColor, 0xFF242425); INDICATORCOLOR = typedArray.getColor (R.styleable.CustomTablayout_indicatorColor, 0xFFFFFFFF); INDICATORWIDTH = typedArray.getDimension (R.styleable.CustomTablayout_indicatorWidth, 0); INDICATORHEIGHT = typedArray.getDimension (R.styleable.CustomTablayout_indicatorHeight, 3); ADDFORINDICATOR = typedArray.getBoolean (R.styleable.CustomTablayout_addforindicator, true); AVERAGEFORINDICATOR=typedArray.getBoolean(R.styleable.CustomTablayout_averageforindicator, false); typedArray.recycle(); } else { TEXTNORMALCOLOR = Color.parseColor("#80FFFFFF"); TEXTSELECTEDCOLOR = Color.parseColor("#FFFFFF"); TEXTNORMALSIZE = 13; TEXTSELECTEDSIZE = 15; BACKGROUNDCOLOR = Color.parseColor("#242425"); INDICATORCOLOR = Color.parseColor("#FFFFFF"); INDICATORWIDTH = 0; INDICATORHEIGHT = 3; ADDFORINDICATOR = true; AVERAGEFORINDICATOR=false; } Log.i("textsize", "TEXTNORMALSIZE:" + INDICATORWIDTH + " TEXTSELECTEDSIZE:" + INDICATORHEIGHT); //隐藏滚动条 setHorizontalScrollBarEnabled(false); //添加tab容器 mTabLayout = new TabLayout(context); LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); mTabLayout.setLayoutParams(params); addView(mTabLayout); mIndicatorHeight = (int) INDICATORHEIGHT; //初始化title宽度 mTitleWidth = getScreenWidth() / mTabVisibleCount; } public CustomTablayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); //读取xml中 if (attrs != null) { TypedArray typedArray = context.obtainStyledAttributes (attrs, R.styleable.CustomTablayout); TEXTNORMALCOLOR = typedArray.getColor (R.styleable.CustomTablayout_textNormalColor, 0x80FFFFFF); TEXTSELECTEDCOLOR = typedArray.getColor (R.styleable.CustomTablayout_textSelectedColor, 0xFFFFFFFF); TEXTNORMALSIZE = typedArray.getDimension (R.styleable.CustomTablayout_textNormalSize, 13); TEXTSELECTEDSIZE = typedArray.getDimension (R.styleable.CustomTablayout_textSelectedSize, 15); BACKGROUNDCOLOR = typedArray.getColor (R.styleable.CustomTablayout_backGroundColor, 0xFF242425); INDICATORCOLOR = typedArray.getColor (R.styleable.CustomTablayout_indicatorColor, 0xFFFFFFFF); INDICATORWIDTH = typedArray.getDimension (R.styleable.CustomTablayout_indicatorWidth, 0); INDICATORHEIGHT = typedArray.getDimension (R.styleable.CustomTablayout_indicatorHeight, 3); ADDFORINDICATOR = typedArray.getBoolean (R.styleable.CustomTablayout_addforindicator, true); typedArray.recycle(); } else { TEXTNORMALCOLOR = Color.parseColor("#80FFFFFF"); TEXTSELECTEDCOLOR = Color.parseColor("#FFFFFF"); TEXTNORMALSIZE = 13/2; TEXTSELECTEDSIZE = 15/2; BACKGROUNDCOLOR = Color.parseColor("#242425"); INDICATORCOLOR = Color.parseColor("#FFFFFF"); INDICATORWIDTH = 0; INDICATORHEIGHT = 3; ADDFORINDICATOR = true; } Log.i("textsize", "TEXTNORMALSIZE:" + TEXTNORMALSIZE + " TEXTSELECTEDSIZE:" + TEXTSELECTEDSIZE); //隐藏滚动条 setHorizontalScrollBarEnabled(false); //添加tab容器 mTabLayout = new TabLayout(context); LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); mTabLayout.setLayoutParams(params); addView(mTabLayout); mIndicatorHeight = (int) INDICATORHEIGHT; //初始化title宽度 mTitleWidth = getScreenWidth() / mTabVisibleCount; } /** * 固定位置填充标题 * @param datas * @param selected_position */ public void setTitles(List<String> datas, int selected_position) { this.mTabTitles = datas; // 如果传入的list有值,则移除布局文件中设置的view if (datas != null && datas.size() > 0) { int size = datas.size(); if (size <= selected_position) { selected_position = 0; } mTabLayout.removeAllViews(); this.mTabTitles = datas; mTabVisibleCount = Math.min(size, COUNT_DEFAULT_MAX_TAB); mTitleWidth = getScreenWidth() / mTabVisibleCount; for (String title : mTabTitles) { // 添加view mTabLayout.addView(getTitleView(title)); } if (AVERAGEFORINDICATOR){ mIndicatorWidth=mTitleWidth; }else { if (ADDFORINDICATOR) { if (INDICATORWIDTH > 0) { mIndicatorWidth = Math.min(mTitleWidth, (int) INDICATORWIDTH); } else { mIndicatorWidth = integerList.get(0); } } else { mIndicatorWidth = 0; } } // 初始时的偏移量 mInitTranslationX = (int) ((mTitleWidth - mIndicatorWidth) / 2.0); // 设置item的click事件 setTitleItemClickEvent(); //初始时tab的位移量 mTranslationX = mTitleWidth * selected_position; highLightTextView(selected_position); } } /** * 填充标题 * * @param datas */ public void setTitles(List<String> datas) { this.mTabTitles = datas; // 如果传入的list有值,则移除布局文件中设置的view if (datas != null && datas.size() > 0) { mTabLayout.removeAllViews(); this.mTabTitles = datas; mTabVisibleCount = Math.min(datas.size(), COUNT_DEFAULT_MAX_TAB); mTitleWidth = getScreenWidth() / mTabVisibleCount; for (String title : mTabTitles) { // 添加view mTabLayout.addView(getTitleView(title)); } if (AVERAGEFORINDICATOR){ mIndicatorWidth=mTitleWidth; }else { if (ADDFORINDICATOR) { if (INDICATORWIDTH > 0) { mIndicatorWidth = Math.min(mTitleWidth, (int) INDICATORWIDTH); } else { mIndicatorWidth = integerList.get(0); } } else { mIndicatorWidth = 0; } } // 初始时的偏移量 mInitTranslationX = (int) ((mTitleWidth - mIndicatorWidth) / 2.0); // 设置item的click事件 setTitleItemClickEvent(); highLightTextView(0); } } public void setClicked(int j) { if (!isClick) { isClick = true; if (mViewPager == null) { Message msg = handler.obtainMessage(); mTranslationX++; msg.what = 3; msg.arg1 = j; handler.sendMessage(msg); resetTextViewColor(); highLightTextView(j); if (tabSelectedListener != null) { tabSelectedListener.tabClicked(j); } } else { mViewPager.setCurrentItem(j, false); } } else { if (!handler.hasMessages(3)) { isClick = false; } } } /** * 标题点击事件 */ private void setTitleItemClickEvent() { int cCount = mTabLayout.getChildCount(); for (int i = 0; i < cCount; i++) { final int j = i; View view = mTabLayout.getChildAt(i); view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (!isClick) { isClick = true; if (mViewPager == null) { Message msg = handler.obtainMessage(); mTranslationX++; msg.what = 3; msg.arg1 = j; handler.sendMessage(msg); resetTextViewColor(); highLightTextView(j); if (tabSelectedListener != null) { tabSelectedListener.tabClicked(j); } } else { mViewPager.setCurrentItem(j, false); } } else { if (!handler.hasMessages(3)) { isClick = false; } } } }); } } /** * 高亮文本 * * @param position */ protected void highLightTextView(int position) { View view = mTabLayout.getChildAt(position); if (view instanceof TextView) { ((TextView) view).setTextColor(TEXTSELECTEDCOLOR); ((TextView) view).setTextSize(TypedValue.COMPLEX_UNIT_PX, TEXTSELECTEDSIZE); } } /** * 重置文本颜色 */ private void resetTextViewColor() { for (int i = 0; i < mTabLayout.getChildCount(); i++) { View view = mTabLayout.getChildAt(i); if (view instanceof TextView) { ((TextView) view).setTextColor(TEXTNORMALCOLOR); //设置文字大小为px的。说明数值单位的。(当设置sp时系统会自动转化为px,因为该数值是px的) ((TextView) view).setTextSize(TypedValue.COMPLEX_UNIT_PX, TEXTNORMALSIZE); } } } /** * 获取title view * * @param title * @return */ private View getTitleView(String title) { TextView tv = new TextView(getContext()); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); lp.width = mTitleWidth; tv.setGravity(Gravity.CENTER); tv.setTextColor(TEXTNORMALCOLOR); tv.setText(title); tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, TEXTNORMALSIZE); tv.setLayoutParams(lp); int mIndicatorWidth = (int) getTextWidth(getContext(), title, (int) TEXTNORMALSIZE); integerList.add(mIndicatorWidth); return tv; } //获取文字的实际宽度。 public float getTextWidth(Context Context, String text, int textSize) { TextPaint paint = new TextPaint(); float scaledDensity = getResources().getDisplayMetrics().scaledDensity; //paint.setTextSize()放入的是px。 paint.setTextSize(textSize); return paint.measureText(text); } int speed = -1; /** * 点击时, * 回滚的速度 */ public int SCROLL_SPEED = -10; private Handler handler = new Handler() { @Override public void handleMessage(final Message msg) { switch (msg.what) { case 3: if (!isClick) break; final int position = msg.arg1; float a = getWidth() / mTabVisibleCount * position - mTranslationX; if (speed == -1) { speed = (int) (a / mIndicatorWidth * 2); speed = Math.abs(speed); if (speed < 20) { speed = 20; } } if (a > 0) { SCROLL_SPEED = speed; } else if (a < 0) { SCROLL_SPEED = -speed; } mTranslationX += SCROLL_SPEED; if (a > -speed && a < speed) { mTranslationX = getWidth() / mTabVisibleCount * position; isClick = false; speed = -1; } else { Message msg1 = handler.obtainMessage(); msg1.what = 3; msg1.arg1 = position; handler.sendMessage(msg1); } mTabLayout.invalidate(); break; } } }; private class TabLayout extends LinearLayout { private final Paint mPaintIndicator; public TabLayout(Context context) { this(context, null); } public TabLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); } public TabLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setOrientation(HORIZONTAL); setBackgroundColor(BACKGROUNDCOLOR); mPaintIndicator = new Paint(); mPaintIndicator.setColor(INDICATORCOLOR); mPaintIndicator.setStyle(Paint.Style.FILL); mPaintIndicator.setStrokeWidth(Util.dip2px(context, 2)); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //绘制指示器 canvas.save(); if (AVERAGEFORINDICATOR){ //设置导航条为每个item的宽度 float x1 = mInitTranslationX + mTranslationX; float x2 = x1 + mIndicatorWidth; float y1 = getHeight() - mIndicatorHeight; float y2 = getHeight(); canvas.drawRect(x1, y1, x2, y2, mPaintIndicator); // canvas.drawLine(x1, y1, x2, y2, mPaintIndicator); canvas.restore(); }else { if (ADDFORINDICATOR) { if (INDICATORWIDTH > 0) { //设置为固定宽度 float x1 = mInitTranslationX + mTranslationX; float x2 = x1 + mIndicatorWidth; float y1 = getHeight() - mIndicatorHeight; float y2 = getHeight(); canvas.drawRect(x1, y1, x2, y2, mPaintIndicator); // canvas.drawLine(x1, y1, x2, y2, mPaintIndicator); canvas.restore(); } else { //两个的适合自动识别标题的难度。 for (int j=0;j<integerList.size();j++){ if (mTranslationX<=j*mTitleWidth+20&&mTranslationX >= (mTitleWidth*j - 20)) { mIndicatorWidth = integerList.get(j); mInitTranslationX = (int) ((mTitleWidth - mIndicatorWidth) / 2.0); } } float x1 = mInitTranslationX + mTranslationX; float x2 = x1 + mIndicatorWidth; float y1, y2; y1 = getHeight() - mIndicatorHeight; // y2 = y1 + Util.dip2px(mIndicatorHeight, getContext()); y2 = getHeight(); canvas.drawRect(x1, y1, x2, y2, mPaintIndicator); // canvas.drawLine(x1, y1, x2, y2, mPaintIndicator); canvas.restore(); } } else { } } } } /** * 获得屏幕的宽度 * * @return */ public int getScreenWidth() { WindowManager wm = (WindowManager) getContext().getSystemService( Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.widthPixels; } private TabSelectedListener tabSelectedListener; public void setTabSelectedListener(TabSelectedListener tabSelectedListener) { this.tabSelectedListener = tabSelectedListener; } public interface TabSelectedListener { void tabClicked(int position); } /** * 对外的ViewPager的回调接口 */ public interface PageChangeListener { void onPageScrolled(int position, float positionOffset, int positionOffsetPixels); void onPageSelected(int position); void onPageScrollStateChanged(int state); } // 对外的ViewPager的回调接口 private PageChangeListener onPageChangeListener; // 对外的ViewPager的回调接口的设置 public void setOnPageChangeListener(PageChangeListener pageChangeListener) { this.onPageChangeListener = pageChangeListener; } // 设置关联的ViewPager public void setViewPager(ViewPager mViewPager, int pos) { this.mViewPager = mViewPager; mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { // 设置字体颜色高亮 resetTextViewColor(); highLightTextView(position); // 回调 if (onPageChangeListener != null) { onPageChangeListener.onPageSelected(position); } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // 滚动 scroll(position, positionOffset); // 回调 if (onPageChangeListener != null) {onPageChangeListener.onPageScrolled(position,positionOffset, positionOffsetPixels); } } @Override public void onPageScrollStateChanged(int state) { // 回调 if (onPageChangeListener != null) { onPageChangeListener.onPageScrollStateChanged(state); } } }); // 设置当前页 mViewPager.setCurrentItem(pos); // 高亮 highLightTextView(pos); } /** * 指示器跟随手指滚动,以及容器滚动 * * @param position * @param offset */ public void scroll(final int position, float offset) { if (offset != 0.0) { isClick = false; } int tabWidth = getScreenWidth() / mTabVisibleCount; int last = 1; // 容器滚动,当移动到倒数最后一个的时候,开始滚动 if (offset > 0 && position >= (mTabVisibleCount - last) && mTabLayout.getChildCount() > mTabVisibleCount) { if (mTabVisibleCount != 1) { scrollTo((position - (mTabVisibleCount - last)) * tabWidth+ (int) (tabWidth * offset), 0); } else { // 为count为1时 的特殊处理 scrollTo(position * tabWidth + (int) (tabWidth * offset), 0); } } else if (position < (mTabVisibleCount - last)) { scrollTo(0, 0); } if (!isClick) { // 不断改变偏移量,invalidate mTranslationX = getWidth() / mTabVisibleCount * (position + offset); mTabLayout.invalidate(); } else { Message msg = handler.obtainMessage(); mTranslationX++; msg.what = 3; msg.arg1 = position; handler.sendMessage(msg); } }}
这是CustomTablayout.xml
<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="CustomTablayout"> <attr name="textNormalColor" format="color"/> <attr name="textSelectedColor" format="color"/> <attr name="textNormalSize" format="dimension"/> <attr name="textSelectedSize" format="dimension"/> <attr name="backGroundColor" format="color"/> <!--addforindicator为true,则添加,默认为true ,为false,默认不添加indicator--> <attr name="addforindicator" format="boolean"/> <!--addforindicator为true,则平均,默认为false ,为false,默认不平均indicator--> <attr name="averageforindicator" format="boolean"/> <attr name="indicatorColor" format="color"/> <attr name="indicatorWidth" format="dimension"/> <attr name="indicatorHeight" format="dimension"/> </declare-styleable></resources>
这是固定宽度的导航条
<com.demo.fuhao.customtablayout.CustomTablayout android:id="@+id/custom1" android:layout_width="match_parent" android:layout_height="44dp" app:textNormalColor="#000000" app:textSelectedColor="#555555" app:textNormalSize="17sp" app:textSelectedSize="17sp" app:indicatorColor="#a45689" app:indicatorHeight="3dp" app:indicatorWidth="20dp" app:backGroundColor="#ffffff" />
这是自适应标题的导航条
<com.demo.fuhao.customtablayout.CustomTablayout android:id="@+id/custom1" android:layout_width="match_parent" android:layout_height="44dp" app:textNormalColor="#000000" app:textSelectedColor="#555555" app:textNormalSize="17sp" app:textSelectedSize="17sp" app:indicatorColor="#a45689" app:indicatorHeight="3dp" app:indicatorWidth="0dp" app:backGroundColor="#ffffff" />
这是覆盖item的导航条
<com.demo.fuhao.customtablayout.CustomTablayout android:id="@+id/custom1" android:layout_width="match_parent" android:layout_height="44dp" app:textNormalColor="#000000" app:textSelectedColor="#555555" app:textNormalSize="17sp" app:textSelectedSize="17sp" app:indicatorColor="#a45689" app:addforindicator="true" app:averageforindicator="true" app:indicatorHeight="3dp" app:backGroundColor="#ffffff" />
这是没有的导航条的
<com.demo.fuhao.customtablayout.CustomTablayout android:id="@+id/custom1" android:layout_width="match_parent" android:layout_height="44dp" app:textNormalColor="#000000" app:textSelectedColor="#555555" app:textNormalSize="17sp" app:textSelectedSize="17sp" app:indicatorColor="#a45689" app:addforindicator="false" app:indicatorHeight="3dp" app:indicatorWidth="0dp" app:backGroundColor="#ffffff" />
下面是用法。
package com.demo.fuhao.customtablayout;import android.content.Intent;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.TypedValue;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import java.util.ArrayList;import java.util.List;/** * Created by fuhao on 2017/1/10. * 博客: http://blog.csdn.net/fuhao012 * github: https://github.com/fuhao012 * 项目介绍:这是一个可以自动根据标题的宽度,来设置标题下面的 indicator的长短,并且可以设置该高度。Tablayout。 */public class MainActivity extends AppCompatActivity implements View.OnClickListener { private CustomTablayout customTablayout; private ViewPager mViewPager;private Button button_1,button_2,button_3,button_4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findView(); setView(); setListener(); } private void findView() { //不要有相同的id。 customTablayout = (CustomTablayout) findViewById(R.id.custom12); mViewPager = (ViewPager) findViewById(R.id.mViewPager); button_1= (Button) findViewById(R.id.button_1); button_2= (Button) findViewById(R.id.button_2); button_3= (Button) findViewById(R.id.button_3); button_4= (Button) findViewById(R.id.button_4); button_1.setOnClickListener(this); button_2.setOnClickListener(this); button_3.setOnClickListener(this); button_4.setOnClickListener(this); } private void setView() { //初始化数据 final List<String> titles = new ArrayList<>(); final ArrayList<View> viewList = new ArrayList<View>();// 将要分页显示的View装入数组中 titles.add("标"); titles.add("标题"); titles.add("标题题"); titles.add("标题标题"); titles.add("标"); titles.add("标题"); titles.add("标题题"); titles.add("标题标题"); for(int i = 0; i <8; i ++){ TextView textView = new TextView(this); textView.setText(titles.get(i)); textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15); ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewPager.LayoutParams.MATCH_PARENT); textView.setGravity(Gravity.CENTER); textView.setLayoutParams(params); viewList.add(textView); } PagerAdapter mAdapter = new PagerAdapter() { @Override public int getCount() { return titles.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(viewList.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { View v = viewList.get(position); ViewGroup parent = (ViewGroup) v.getParent(); if (parent != null) { parent.removeAllViews(); } container.addView(v, 0); return viewList.get(position); } }; //绑定监听 mViewPager.setAdapter(mAdapter); customTablayout.setTitles(titles); customTablayout.setViewPager(mViewPager, 0); // customTablayout.setTitles(titles, 3);//可以设置默认选中的title customTablayout.setOnPageChangeListener(new CustomTablayout.PageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { Toast.makeText(MainActivity.this, "选择了:" + position, Toast.LENGTH_SHORT).show(); } @Override public void onPageScrollStateChanged(int state) { } });// //上面是有ViewPager的情况。如果不想与Viewpager绑定则可以调用:// customTablayout.setTabSelectedListener(new CustomTablayout.TabSelectedListener() {// @Override// public void tabClicked(int position) {//// }// });//// customTablayout.setClicked(3); } private void setListener() { } @Override public void onClick(View v) { switch (v.getId()){ case R.id.button_1:Intent intent1=new Intent(MainActivity.this,ActivityButton1.class); startActivity(intent1); break; case R.id.button_2:Intent intent2=new Intent(MainActivity.this,ActivityButton2.class); startActivity(intent2); break; case R.id.button_3:Intent intent3=new Intent(MainActivity.this,ActivityButton3.class); startActivity(intent3); break; case R.id.button_4: Intent intent4=new Intent(MainActivity.this,ActivityButton4.class); startActivity(intent4); break; } }}
代码地址
0 0
- 自定义tablayout
- 自定义TabLayout
- 自定义个TabLayout
- TabLayout的自定义实现
- 自定义TabLayout的实现
- 自定义TabLayout的Tab
- TabLayout之自定义样式
- Android---Tablayout自定义tab
- 优雅的自定义TabLayout
- 自定义Tablayout的布局
- TabLayout自定义图标
- TabLayout的TabItem自定义
- 超强自定义TabLayout
- 自定义自适应的TabLayout
- TabLayout的TabItem自定义
- TabLayout自定义样式
- 仿微信自定义TabLayout
- tablayout自定义布局
- JavaScript继承
- CSS 外边距(margin)重叠及防止方法
- 【Dongle】【Java】规范之JDBC
- poj3734(矩阵幂)
- java的HashCode方法
- 自定义tablayout
- 又一版A+B
- 元素居中的几种方法
- 在viewPager里使用高德地图
- Poj 3461 Oulipo(Kmp)
- 2016 TOP 10 ANDROID LIBRARY
- 用友nc65 uap开发参照节点数据拉单之二----直接通过调用查询模版查询上游单据
- 在python虚拟环境Virtualenv下载安装pywin32
- jQuery学习笔记:extend