android 控件 margin,Android MarginDesign控件TabLayout导航栏使用详解
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导航栏使用详解相关推荐
- WPF中通过控件Margin属性设置控件位置
WPF中通过控件Margin属性设置控件位置 一.Margin属性简介 二.Margin在cs文件中定义 三.Margin设置控件位置 四.参考文档 一.Margin属性简介 在使用WPF进行页面设计 ...
- Android 7.0 SystemUI 之启动和状态栏和导航栏简介
Android 7.0 SystemUI 之启动和状态栏和导航栏简介 一.SystemUI 是什么 首先SystemUI 是一个系统应用,apk路径位于/system/priv-app 源码路径位于: ...
- Android 10 及api29之后,解决全透明导航栏不成功
<?xml version="1.0" encoding="utf-8"?> <resources><style name=&qu ...
- Android基础入门教程——8.3.1 三个绘图工具类详解
Android基础入门教程--8.3.1 三个绘图工具类详解 标签(空格分隔): Android基础入门教程 本节引言: 上两小节我们学习了Drawable以及Bitmap,都是加载好图片的,而本节我 ...
- 【Android语音合成TTS】百度语音接入方法,和使用技巧详解
请尊重他人的劳动成果,转载请注明出处:[Android语音合成TTS]百度语音接入方法,和使用技巧详解 Ps. 依托于百度开放云,百度语音为合作伙伴提供了业界领先.永久免费的语音技术服务,目前已上线的 ...
- 【Android游戏开发十二】(保存游戏数据 [上文])详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!
李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/327.html 很多童鞋说 ...
- android 6.0 存储卡,Android 6.0区别U盘和SD卡设备的方法详解
如下所示: public static boolean isSdcardExists(Context context) { StorageManager storageManager = Storag ...
- android 动态设置margin,android 代码中设置margin
场景:Android怎么在java代码中设置margin Android如何在java代码中设置margin 原创帖,转发请注明出处:http://thierry-xing.iteye.com/blo ...
- android json mysql_Android通过json向MySQL中读写数据的方法详解【读取篇】
本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private vo ...
最新文章
- Java程序员从笨鸟到菜鸟之(三十)javascript弹出框、事件、对象化编程
- c/c++的“大小,长度
- subpress installed post-installation script returned error exit status 1
- mysql数据库check命令_利用mysqlcheck命令快速修复mysql数据库
- LeetCode 1010. 总持续时间可被 60 整除的歌曲(哈希)
- 阿里巴巴 Arthas 3.1.5版本支持火焰图,快速定位应用热点
- python装饰器的通俗理解_Python|闭包、装饰器,简单的实例,通俗的理解
- 我从构建生产型数据库中学到的42件事
- url请求特殊字符转换
- Oracle 索引的分类
- 8.1 复用(组合/继承)
- maven仓库--私服(Nexus的配置使用)
- Linux内核入门(二)——用户态向内核态切换
- GoC全教程(附各种下载、教程链接)
- Altium_Designer的使用
- 关于hash(一):基本概念
- BZOJ[3772]精神污染 二维数点
- linux中cpu_to_be32,Linux cpufreq framework(2)
- GDB 用法之查看内存
- Thingworx- 创建一个事物
热门文章
- php 屏蔽ctrl c,ctrl+c用不了怎么回事
- linux weblogic 内存溢出,weblogic 安装升级补丁出现内存溢出问题解决
- python模型的属性是什么_python – Django:为什么Django模型字段的类属性?
- df添加一行 python_Python为输出的数据绘制表格
- gsm模块网站服务器,gsm模块是什么_gsm模块工作原理_gsm模块的应用
- pointnet分割自己的点云数据_细嚼慢咽读论文:PointNet论文及代码详细解析
- java asm jndi_GitHub - Q1ngShan/JNDI: JNDI 注入利用工具
- Win7旗舰版系统0x0000007f蓝屏怎么办
- 腾讯视频怎么设置下载视频位置
- 模糊聚类划分matlab代码,Matlab协同模糊聚类建模