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();
    }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值