TabLayout的使用简单介绍

比如在平常的项目中实现这样的效果,一般都是都会使用viewPageIndicate等几个开源框架直接实现,或者使用自定义的HorizontalScroll再配合ViewPage+Fragment实现。在谷歌推出marginDesign之后,实现这种效果可以直接使用TabLayout实现。另外Tablayout可以通过自定义View自定义导航栏的效果。这样使用的时候更加灵活多变。

首先需要导入design包

在app的build.gradle下添加design的包

dependencies {

compile 'com.android.support:design:25.0.1'

}

然后就开始撸起袖子,开始如何使用

在xml文件里面写布局:

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/activity_main"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/tabLayout"

android:layout_width="match_parent"

style="@style/MyCustomTabLayout"

android:layout_height="wrap_content" />

android:id="@+id/viewPager"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1"

/>

既然使用到了fragment,就免不了要添加下简单的布局:

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/textView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:text="默认" />

然后是fragment和FragmentPagerAdapter的代码。写过的人应该对这个很熟了,就直接粘下代码

public class FramentAdapter extends FragmentPagerAdapter {

private String[] titles;

public FramentAdapter(FragmentManager fm, String[] titles) {

super(fm);

this.titles = titles;

}

@Override

public Fragment getItem(int position) {

return PageFragment.newInstace(position,titles);

}

@Override

public int getCount() {

return titles.length;

}

@Override

public CharSequence getPageTitle(int position) {

return titles[position];

}

}

Fragment的代码:

public class PageFragment extends Fragment {

private int position;

private String[] titles;

private Context context;

public static PageFragment newInstace(int position, String[] titles) {

Bundle bundle = new Bundle();

bundle.putInt("POSITION", position);

bundle.putStringArray("ARRAY", titles);

PageFragment pageFragment = new PageFragment();

pageFragment.setArguments(bundle);

return pageFragment;

}

@Override

public void onAttach(Context context) {

super.onAttach(context);

this.context=context;

}

@Override

public void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

position = getArguments().getInt("POSITION");

titles = getArguments().getStringArray("ARRAY");

}

@Nullable

@Override

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

View view =inflater.inflate(R.layout.item_layout,null);

TextView textView = (TextView) view.findViewById(R.id.textView);

textView.setText(titles[position]);

return view;

}

}

写好这些之后最后在MainActivity中看下如何使用:

public class MainActivity extends FragmentActivity {

private TabLayout tabLayout;

private ViewPager viewPager;

private String[] titles = {"黄蓉", "郭靖", "杨过", "小龙女", "尹志平", "金轮法王", "收到货就收到货圣诞节"};

private TextView textView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tabLayout = (TabLayout) findViewById(R.id.tabLayout);

viewPager = (ViewPager) findViewById(R.id.viewPager);

FramentAdapter framentAdapter = new FramentAdapter(getSupportFragmentManager(), titles);

viewPager.setAdapter(framentAdapter);

tabLayout.setupWithViewPager(viewPager);

tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);}

}

viewPager.setAdapter(framentAdapter);这行代码必须在下面这行代码之前。有兴趣的可以看下源码。 tabLayout.setupWithViewPager(viewPager);

另外 tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);给tablayout设置了这种模式,mode有两种,这种模式大概的意思是,我内容很多的时候,可以使tab平铺滑动。

很多时候我们需要自己自定义样式或者要自定义我们的tab。

自定义样式:需要在Style文件下添加自己的样式,然后应用就好了,例如;

?attr/colorAccent

2dp

12dp

12dp

?attr/selectableItemBackground

@style/MyCustomTabTextAppearance

?android:textColorPrimary

14sp

?android:textColorSecondary

true

另外一种就是需要添加我们自定义的View:

首先写要定义的布局文件;

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:id="@id/textView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:gravity="center"

/>

android:layout_width="10dp"

android:layout_height="10dp"

android:background="@drawable/bg_text" />

然后稍微修改下FragmentPagerAdapter的代码

public class FramentAdapter extends FragmentPagerAdapter {

private String[] titles;

public FramentAdapter(FragmentManager fm, String[] titles) {

super(fm);

this.titles = titles;

}

@Override

public Fragment getItem(int position) {

return PageFragment.newInstace(position,titles);

}

@Override

public int getCount() {

return titles.length;

}

@Override

public CharSequence getPageTitle(int position) {

return null;

}

}

最后看下怎么在MainActivity中使用。

public class MainActivity extends FragmentActivity {

private TabLayout tabLayout;

private ViewPager viewPager;

private String[] titles = {"黄蓉", "郭靖", "杨过", "小龙女", "尹志平", "金轮法王", "收到货就收到货圣诞节"};

private TextView textView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tabLayout = (TabLayout) findViewById(R.id.tabLayout);

viewPager = (ViewPager) findViewById(R.id.viewPager);

FramentAdapter framentAdapter = new FramentAdapter(getSupportFragmentManager(), titles);

viewPager.setAdapter(framentAdapter);

tabLayout.setupWithViewPager(viewPager);

tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);

for (int i = 0; i < tabLayout.getTabCount(); i++) {

TabLayout.Tab tab = tabLayout.getTabAt(i);

tab.setCustomView(getTabView(i));

}

}

private View getTabView(int position) {

View view = View.inflate(this, R.layout.item_tab_view, null);

textView = (TextView) view.findViewById(R.id.textView);

textView.setText(titles[position]);

return view;

}

}

到这里就结束了TabLayout的使用。放下源码:Tablayout的使用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android 控件 margin,Android MarginDesign控件TabLayout导航栏使用详解相关推荐

  1. WPF中通过控件Margin属性设置控件位置

    WPF中通过控件Margin属性设置控件位置 一.Margin属性简介 二.Margin在cs文件中定义 三.Margin设置控件位置 四.参考文档 一.Margin属性简介 在使用WPF进行页面设计 ...

  2. Android 7.0 SystemUI 之启动和状态栏和导航栏简介

    Android 7.0 SystemUI 之启动和状态栏和导航栏简介 一.SystemUI 是什么 首先SystemUI 是一个系统应用,apk路径位于/system/priv-app 源码路径位于: ...

  3. Android 10 及api29之后,解决全透明导航栏不成功

    <?xml version="1.0" encoding="utf-8"?> <resources><style name=&qu ...

  4. Android基础入门教程——8.3.1 三个绘图工具类详解

    Android基础入门教程--8.3.1 三个绘图工具类详解 标签(空格分隔): Android基础入门教程 本节引言: 上两小节我们学习了Drawable以及Bitmap,都是加载好图片的,而本节我 ...

  5. 【Android语音合成TTS】百度语音接入方法,和使用技巧详解

    请尊重他人的劳动成果,转载请注明出处:[Android语音合成TTS]百度语音接入方法,和使用技巧详解 Ps. 依托于百度开放云,百度语音为合作伙伴提供了业界领先.永久免费的语音技术服务,目前已上线的 ...

  6. 【Android游戏开发十二】(保存游戏数据 [上文])详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!

     李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接:  http://www.himigame.com/android-game/327.html 很多童鞋说 ...

  7. android 6.0 存储卡,Android 6.0区别U盘和SD卡设备的方法详解

    如下所示: public static boolean isSdcardExists(Context context) { StorageManager storageManager = Storag ...

  8. android 动态设置margin,android 代码中设置margin

    场景:Android怎么在java代码中设置margin Android如何在java代码中设置margin 原创帖,转发请注明出处:http://thierry-xing.iteye.com/blo ...

  9. android json mysql_Android通过json向MySQL中读写数据的方法详解【读取篇】

    本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private vo ...

最新文章

  1. Java程序员从笨鸟到菜鸟之(三十)javascript弹出框、事件、对象化编程
  2. c/c++的“大小,长度
  3. subpress installed post-installation script returned error exit status 1
  4. mysql数据库check命令_利用mysqlcheck命令快速修复mysql数据库
  5. LeetCode 1010. 总持续时间可被 60 整除的歌曲(哈希)
  6. 阿里巴巴 Arthas 3.1.5版本支持火焰图,快速定位应用热点
  7. python装饰器的通俗理解_Python|闭包、装饰器,简单的实例,通俗的理解
  8. 我从构建生产型数据库中学到的42件事
  9. url请求特殊字符转换
  10. Oracle 索引的分类
  11. 8.1 复用(组合/继承)
  12. maven仓库--私服(Nexus的配置使用)
  13. Linux内核入门(二)——用户态向内核态切换
  14. GoC全教程(附各种下载、教程链接)
  15. Altium_Designer的使用
  16. 关于hash(一):基本概念
  17. BZOJ[3772]精神污染 二维数点
  18. linux中cpu_to_be32,Linux cpufreq framework(2)
  19. GDB 用法之查看内存
  20. Thingworx- 创建一个事物

热门文章

  1. php 屏蔽ctrl c,ctrl+c用不了怎么回事
  2. linux weblogic 内存溢出,weblogic 安装升级补丁出现内存溢出问题解决
  3. python模型的属性是什么_python – Django:为什么Django模型字段的类属性?
  4. df添加一行 python_Python为输出的数据绘制表格
  5. gsm模块网站服务器,gsm模块是什么_gsm模块工作原理_gsm模块的应用
  6. pointnet分割自己的点云数据_细嚼慢咽读论文:PointNet论文及代码详细解析
  7. java asm jndi_GitHub - Q1ngShan/JNDI: JNDI 注入利用工具
  8. Win7旗舰版系统0x0000007f蓝屏怎么办
  9. 腾讯视频怎么设置下载视频位置
  10. 模糊聚类划分matlab代码,Matlab协同模糊聚类建模