TabLayout简单使用以及+Fragment配合

Posted 骑鲸鱼的企鹅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TabLayout简单使用以及+Fragment配合相关的知识,希望对你有一定的参考价值。

我使用的 android studio进行开发的,所以引用TabLayout很简单,

只要在build.gradle中加入compile ‘com.android.support:design:22.2.0’即可
或者直接写成(compile “com.android.support:design:$supportLibVersion”)。
ext
supportLibVersion = “25.0.1”

代码:

常用套路:

String[] titles = getResources().getStringArray(R.array.visit_summary);
        for (int i = 0; i < titles.length; i++) 
            tab.addTab(tab.newTab().setText(titles[i]));
        
//        showIndex(0);//初始化 显示
        tab.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() 
            @Override
            public void onTabSelected(TabLayout.Tab tab) 
                showIndex(tab.getPosition());//切换显示-文末有一个直接组合Fragment的切换方法
            

            @Override
            public void onTabUnselected(TabLayout.Tab tab) 

            

            @Override
            public void onTabReselected(TabLayout.Tab tab) 

            
        );

切换方法:

   //切换标签页
    private void showIndex(int index) 
        //第一页是总结评估-可编辑页面
        if (index == 0) 

         else if (index == 1) 


         else if (index == 3) 

        
    

资源属性
res-values-array文件里面添加:例如:

<string-array name="visit_summary">
        <item>拜访预约</item>
        <item>拜访现场</item>
        <item>拜访承诺</item> </string-array>

布局里面可以写成

    <android.support.design.widget.TabLayout
            android:id="@+id/tab"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerVertical="true"
            android:background="@drawable/visit_summary_bg"//设置背景
            app:tabBackground="@drawable/visit_summary_bg_tab"//这是每个页签的背景
            app:tabGravity="fill"//页签状态(填充慢)
            app:tabIndicatorColor="@null"//标签底部标识颜色
            app:tabMode="fixed"//样式固定
            app:tabSelectedTextColor="@color/white" 被选中的页签的字体颜色
/>

附上一个可能需要的功能
可以写在工具类里面,直接调用。(一个是显示一半中间线方法,一个是显示全部中间线。)
使用方法直接调用,并写上对应的参数:

public static final int TABLAYOUT_NORMAL_COLOR=0;//默认颜色 常量
/**//代码中直接调用
  *  tab TabLayout 对象
  *  getContext() 当前类
  *  Constants.TABLAYOUT_NORMAL_COLOR 使用默认的背景资源
  */
Utils.showTableLayoutDividerMiddle(tab, getContext(), Constants.TABLAYOUT_NORMAL_COLOR);
/**一个是显示一半中间线方法:
     * TabLayout(自定义的控件) 的中间线设置 **一半的显示**
     *
     * @param view     TabLayout 对象
     * @param context  当前类
     * @param drawable 背景资源
     */
    public static void showTableLayoutDividerMiddleHalf(TabLayout view, Context context, int drawable) 
        //重新计算控件高度
        int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
        int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
        view.measure(w, h);
        LinearLayout linearLayout = (LinearLayout) view.getChildAt(0);
        linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);//设置样式,中间线样式
        linearLayout.setDividerPadding(view.getMeasuredHeight() / 4);//设置线的大小,间隔距离上下各为1/4,也就是1/2一半的大小
        int lineDrawable = R.drawable.visit_summary_bg_line;//默认背景(颜色:灰色,大小1px)
        if (drawable != Constants.TABLAYOUT_NORMAL) 
            lineDrawable = drawable;
        
        linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, lineDrawable));//设置线
    

  /**一个是显示全部中间线
     * TabLayout(自定义的控件) 的中间线设置 显示
     *
     * @param view     TabLayout 对象
     * @param context  当前类
     * @param drawable 背景资源
     */
    public static void showTableLayoutDividerMiddle(TabLayout view, Context context, int drawable) 
        LinearLayout linearLayout = (LinearLayout) view.getChildAt(0);
        linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);//设置样式,中间线样式
        int lineDrawable = R.drawable.visit_summary_bg_line;//默认背景(颜色:灰色,大小1px)
        if (drawable != Constants.TABLAYOUT_NORMAL) 
            lineDrawable = drawable;
        
        linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, lineDrawable));//设置线
    

至于Fragment每个人添加方式不同,这里只举一中例子:
.
.
.
布局里写一个控件用于填充:

        <LinearLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="10dp"
            android:orientation="vertical"></LinearLayout>

代码里,这样写用于添加Fragment

  private Fragment1 fragment1;
  private Fragment2 fragment2;
  private Fragment3 fragment3;

 private void addFragment() 
        fragment1= new Fragment1 ();//创建对象
        fragment1.setVisitId(visitId);//设置一些属性(不需要,可以不用)
        fragment1.setEditMode(editMode);//设置一些属性(不需要,可以不用)
        fragment1.setSomeListener(someListener);//设置一些监听(不需要,可以不用)

        fragment2= new Fragment2 ();
        fragment2.setVisitId(visitId);
        fragment2.setEditMode(editMode);
        fragment2.setSomeListener(someListener);

        fragment3= new Fragment3();
        fragment3.setVisitId(visitId);
        fragment3.setEditMode(editMode);
        fragment3.setSomeListener(someListener);

        FragmentManager fm = getChildFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();

        transaction.add(R.id.container, Fragment1 , "fragment1").show(fragment1);        
        transaction.add(R.id.container, Fragment2 , "fragment2").hide(fragment2);  
        transaction.add(R.id.container, Fragment3 , "fragment3").hide(fragment3);

        transaction.commit();
    

这里就是加上 Fragment的切换 Fragment的方法

   private void showIndex(int index) 
        FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
        List<Fragment> fragments = getChildFragmentManager().getFragments();
        for (int i = 0; i < fragments.size(); i++) 
            if (i == index) 
                transaction.show(fragments.get(i));
             else 
                transaction.hide(fragments.get(i));
            
        
        transaction.commit();
    

以上是关于TabLayout简单使用以及+Fragment配合的主要内容,如果未能解决你的问题,请参考以下文章

简单Fragment+Tablayout+ViewPage实现底部和顶部滑动(菜单栏)

TabLayout+ViewPager+Fragment 快速实现标题切换效果

用TabLayout+ViewPager+Fragment控件实现简单的翻页效果 --Android--

用TabLayout+ViewPager+Fragment控件实现简单的翻页效果 --Android--

Android开发之漫漫长途 Fragment番外篇——TabLayout+ViewPager+Fragment

cathome 猫家 开发日记-tablayout+viewpager+fragment