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--