博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android ---------- TabLayout 实战 (一)
阅读量:6953 次
发布时间:2019-06-27

本文共 2846 字,大约阅读时间需要 9 分钟。

1.效果图

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

3.添加依赖: compile 'com.android.support:design:27.+ ‘

  4.布局文件:

 

//设置未选中标签的字体的颜色

 

5.控制器部分代码:

(一)

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
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); vpager.setOffscreenPageLimit(3);  // 设置viewpager缓存页面个数,建议:有 n 个tab就缓存 n-1 个页面  //关联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); }

6.实践感悟

(1) ViewPager 的含义是单独的一个页面,如果要设置此页面滚动的话,不可在ViewPager的外部而应该在子布局的外围设置srollview;把每一个ViewPager当成独立的页面就好了。

转载于:https://www.cnblogs.com/apeandcat/p/8567999.html

你可能感兴趣的文章
你必须掌握在Flutter中添加资源文件
查看>>
go语言与c语言的相互调用
查看>>
Git Personal Manual
查看>>
小菜菜3月前端面试记录汇总---持续更新
查看>>
前端之路:紧跟潮流,docker简单应用
查看>>
PHP Session
查看>>
Django1-配置MySQL数据库
查看>>
小强面试记
查看>>
如何隐藏或删除Windows 10任务栏图标
查看>>
创建自定义模板
查看>>
Qtum量子链周报(3月18日-3月24日)
查看>>
你真的知道如何使用Vue.set吗
查看>>
couchbase介绍与实践(一)
查看>>
JavaScript正则表达式(2)
查看>>
开源 | Rainbond 3.5 pre-release
查看>>
css中px、em、rem区别与使用
查看>>
两个男同事打架 公司决定要不离职, 要不手牵手一下午, 结果他俩就选择.........
查看>>
JAVA 多用户商城系统b2b2c-Spring Cloud常见问题与总结(一)
查看>>
NodeJS Docker 打包全面优化:优雅停机、多阶段、上下文目录
查看>>
(三)java版spring cloud+spring boot 社交电子商务平台 - Spring Cloud集成项目简介
查看>>