您的位置:首页 > 其它

TabLayout简单使用以及+Fragment配合

2017-09-29 16:31 309 查看
我使用的 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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: