码迷,mamicode.com
首页 > 移动开发 > 详细

Android TabLayout 实战

时间:2018-03-15 11:24:32      阅读:1687      评论:0      收藏:0      [点我收藏+]

标签:划线   tabs   关联   source   ide   dip   static   init   stat   

1.效果图

技术分享图片

2.原理:TabLayout提供了一个水平的布局用来展示Tabs

3.(探讨一:有的博文说要添加依赖: compile ‘com.android.support:design:25.3.1‘           

       可是本人未添加此依赖 ,依然可以运行无误)

  布局文件:

<android.support.design.widget.TabLayout

android:id="@+id/tablayout"

android:layout_width="match_parent"

android:layout_height="30dp"

app:tabIndicatorHeight="2dp"  // 设置便签下划线的高度(厚度)      不设置的话,默认大小就可以

app:tabIndicatorColor="#007aff" // 设置标签下划线的颜色

app:tabSelectedTextColor="#007aff" // 设置选中标签的字体的颜色

app:tabTextColor="@android:color/darker_gray" /> //设置未选中标签的字体的颜色

<android.support.v4.view.ViewPager

android:id="@+id/vpager"

      android:layout_width="match_parent"

    android:layout_height="200dp" />

 

控制器部分代码:

(一)

class TabAdapter extends FragmentPagerAdapter {

public TabAdapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int position) {
return fragments.get(position);
}

@Override
public int getCount() {
return fragments.size();
}
//显示标签上的文字
@Override
public CharSequence getPageTitle(int position) {
return tabs.get(position);
}
}

 

(二)

public static class TabFrament extends Fragment {
private Context context;
private String content;

public TabFrament() {
}

@SuppressLint("ValidFragment")
public TabFrament(Context contexts, String content) {
this.context = contexts;
this.content = content;
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
TextView textView = new TextView(context); //此处用Textview举个例子,可以布置任意布局,自定义布局,用View view = inflater.inflate()方法
             textView.setText(content);
textView.setTextSize(30);
textView.setGravity(Gravity.CENTER);
return textView;

}
}

(三)

  private void initData() {

for(Map<String,String> map:list) { // 从服务器获取的数据,已经处理成list
tabs.add(map.get("tab"));       // tab标签 
fragments.add(new TabFrament(this,map.get("content"))); //viewpage 内容
}
tabLayout = (TabLayout) findViewById(R.id.tablayout);

//设置TabLayout的模式
tabLayout.setTabGravity(TabLayout.GRAVITY_CENTER); //注:此条属性必须配合MODE_FIXED使用,不然不起作用
  //
GRAVITY_FILL  让每个标签平分TabLayout的全部宽度

// GRAVITY_CENTER  让每个标签显示自身宽度,然后所有标签居中显示


tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
// MODE_FIXED  表示宽度始终是tablayout控件指定的宽度,如果标签过多,那么就无限挤压控件 
// MODE_SCROLLABLE 表示每个标签都保持自身宽度,一旦标签过多,给标题栏提供支持横向滑动的功能


TabAdapter tabadapter=new TabAdapter(getSupportFragmentManager());
vpager.setAdapter(tabadapter);

//关联ViewPager和TabLayout
tabLayout.setupWithViewPager(vpager);


        //设置分割线     标签之间的纵向分割线
        LinearLayout linear = (LinearLayout)tabLayout.getChildAt(0);
        linear.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
        linear.setDividerDrawable(ContextCompat.getDrawable(this,R.drawable.divider));
        //设置分割线间隔
        linear.setDividerPadding(dip2px(15));
}
  
          (四)
public int dip2px(int dip) { float density = getResources().getDisplayMetrics().density; return (int) (dip * density + 0.5); }
 

 

Android TabLayout 实战

标签:划线   tabs   关联   source   ide   dip   static   init   stat   

原文地址:https://www.cnblogs.com/apeandcat/p/8567999.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!