TabLayout 导航

#横向滑动菜单之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) {

    }
});













 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你想问关于顶部导航TabLayout和ViewPager的内容。这两个组件通常一起使用,可以实现轻松的页面切换和导航功能。 TabLayout是一个选项卡布局,用于显示多个页面的标题,并且可以通过点击选项卡来切换页面。ViewPager是一个可滑动的布局容器,可以容纳多个子视图,并且可以通过滑动来切换子视图。 在Android中,我们可以通过将TabLayout和ViewPager结合起来使用,来实现多页面的导航和切换。具体的实现方式可以参考以下步骤: 1. 在布局文件中添加TabLayout和ViewPager组件,并将它们进行关联: ``` <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. 在Activity或Fragment中,创建PagerAdapter适配器,并将其设置给ViewPager: ``` public class MyPagerAdapter extends FragmentPagerAdapter { private final List<Fragment> mFragments = new ArrayList<>(); private final List<String> mFragmentTitles = new ArrayList<>(); public MyPagerAdapter(FragmentManager fm) { super(fm); } public void addFragment(Fragment fragment, String title) { mFragments.add(fragment); mFragmentTitles.add(title); } @Override public Fragment getItem(int position) { return mFragments.get(position); } @Override public int getCount() { return mFragments.size(); } @Override public CharSequence getPageTitle(int position) { return mFragmentTitles.get(position); } } ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager()); adapter.addFragment(new Fragment1(), "Tab 1"); adapter.addFragment(new Fragment2(), "Tab 2"); adapter.addFragment(new Fragment3(), "Tab 3"); viewPager.setAdapter(adapter); ``` 3. 将TabLayout和ViewPager进行绑定,并设置TabLayout的显示模式: ``` TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.setupWithViewPager(viewPager); tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE); ``` 通过以上步骤,我们就可以实现一个带有顶部导航TabLayout和可滑动页面切换功能的布局。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值