#横向滑动菜单之TabLayout
添加依赖
compile 'com.android.support:design:26.0.0-alpha1' 新版本
* compile 'com.android.support:design:25.3.1' 旧版本 会报错 导一个
* 报错
Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.0-alpha1) from [com.android.support:appcompat-v7:26.0.0-alpha1] AndroidManifest.xml:27:9-38 is also present at [com.android.support:design:25.3.1] AndroidManifest.xml:27:9-31 value=(25.3.1).
Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:25:5-27:41 to override.
* 由于版本不一样...所以需要修改当前应用的build.grandle文件
compileSdkVersion 25
targetSdkVersion 25
compile 'com.android.support:appcompat-v7:25.+'
1.单独使用,不结合ViewPager:
xmlns:app="http://schemas.android.com/apk/res-auto" 添加命名空间 根部句
app:tabMode="scrollable" app:tabGravity="center" app:tabSelectedTextColor="@color/colorPrimaryDark" app:tabTextColor="@color/colorPrimary" app:tabIndicatorColor="@color/colorAccent"
app:tabMaxWidth="0dp" //可以让Tab沾满全局
//tab可滚动
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
* app:tabMode="scrollable" scrollable是可以横行滚动,fixed是指固定个数
//tab居中显示
tabLayout.setTabGravity(TabLayout.GRAVITY_CENTER);
* app:tabGravity="center" 对齐方式,可选fill和center:居中显示 和tabmode可以设置内容平铺屏幕
//tab的字体选择器,默认黑色,选择时红色
tabLayout.setTabTextColors(Color.BLACK, Color.RED);
* app:tabSelectedTextColor="@color/colorPrimaryDark" 选择tab的文本颜色
* app:tabTextColor="@color/colorPrimary" 普通tab字体颜色
//tab的下划线颜色,默认是粉红色
tabLayout.setSelectedTabIndicatorColor(Color.BLUE);
* app:tabIndicatorColor="@color/colorAccent" 设置tab下划线的颜色
tab文字默认选中 的网址 和 方法
http://blog.csdn.net/qq_16628781/article/details/62430662
TabLayout.getTabAt(index).select()
//添加tab
tabLayout.addTab(tabLayout.newTab().setText("TAB" + i));
//1.设置tab的点击监听器...
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
* 选中onTabSelected
选中的时候可以切换fragment显示(repalce)
* 未选中onTabUnselected
* 重新再次选中onTabReselected
2.结合ViewPager使用
//给ViewPager设置适配器
mViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
* public CharSequence getPageTitle(int position) {//显示tab上的名字
//将ViewPager关联到TabLayout上
mTabLayout.setupWithViewPager(mViewPager);
* 设置监听,注意:如果设置了setOnTabSelectedListener,则setupWithViewPager不会生效,因为setupWithViewPager内部也是通过设置该监听来触发ViewPager的切换的
<android.support.design.widget.TabLayout
android:id="@+id/tabs" //控件的ID
android:layout_width="wrap_content" //控件的宽
android:layout_height="wrap_content" //控件的高
app:tabBackground="@color/line_view" //整个TabLayout的背景颜色
app:tabContentStart="20dp" //TabLayout开始的位置的偏移量
app:tabIndicatorColor="@color/bule_zhu" //指示器下标的颜色
app:tabIndicatorHeight="3dp" //指示器下标的高度(高度为0,相当于没有下标)
app:tabMode="scrollable" //Tab的模式(scrollable-滑动,fixed-固定)
app:tabSelectedTextColor="@color/bule_zhu" //选中字体的颜色
app:tabTextColor="@color/blue" //未选中字体的颜色
app:tabGravity="center" // 整个TabLayout居中显示(如果是fill,则是充满)
app:tabTextAppearance="@android:style/TextAppearance.Holo.Large" // tablayout上字体的大小
app:tabMaxWidth="100dp" //最大的tab宽度
app:tabMinWidth="20dp" //最小的tab宽度
/>
* 参考:http://www.jb51.net/article/120336.htm 或 http://blog.csdn.net/lengxuechiwu1314/article/details/71079546
####horizatalScrollView切换
参照:
* http://www.cnblogs.com/ldou/p/5322662.html
设置下划线的长度
public void setIndicator(TabLayout tabs, int leftDip, int rightDip) { Class<?> tabLayout = tabs.getClass(); Field tabStrip = null; try { tabStrip = tabLayout.getDeclaredField("mTabStrip"); } catch (NoSuchFieldException e) { e.printStackTrace(); } tabStrip.setAccessible(true); LinearLayout llTab = null; try { llTab = (LinearLayout) tabStrip.get(tabs); } catch (IllegalAccessException e) { e.printStackTrace(); } int left = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, leftDip, Resources.getSystem().getDisplayMetrics()); int right = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, rightDip, Resources.getSystem().getDisplayMetrics()); for (int i = 0; i < llTab.getChildCount(); i++) { View child = llTab.getChildAt(i); child.setPadding(0, 0, 0, 0); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1); params.leftMargin = left; params.rightMargin = right; child.setLayoutParams(params); child.invalidate(); } }
需要用的时候,,只要在有tablayout的地方就可以用了
使用的方法如下面的代码所示
@Override public void onStart() { super.onStart(); tabLayout.post(new Runnable() { @Override public void run() { setIndicator(tabLayout, 50, 50); } }); }
tabLayout 自定义item 实现选中放大字体
listfragment.add(new BloodOneFragment()); listfragment.add(new BloodTwoFragment()); tabLayout.setupWithViewPager(pager); for (int i=0;i<name.length;i++){ TabLayout.Tab tab = tabLayout.newTab(); View view = LayoutInflater.from(this).inflate(R.layout.rader_tab_tiem, null); TextView tv = (TextView) view.findViewById(R.id.item); tv.setTextSize(20); if (i==0)tv.setTextSize(30); tv.setText(name[i]); tab.setCustomView(view); tabLayout.addTab(tab); } tabLayout.getTabAt(0).select(); tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { TextView viewById = (TextView) tab.getCustomView().findViewById(R.id.item); viewById.setTextSize(30); } @Override public void onTabUnselected(TabLayout.Tab tab) { TextView viewById = (TextView) tab.getCustomView().findViewById(R.id.item); viewById.setTextSize(20); } @Override public void onTabReselected(TabLayout.Tab tab) { } });