Android开发 Tablayout的详解
<h1><span style="color: rgba(0, 128, 128, 1)">版权声明</span></h1><p>本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/11039643.html</p>
<div>本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。</div>
<h1><span style="color: rgba(0, 128, 128, 1)">前言</span></h1>
<p> Tablayout一般做主页底下的导航栏开发或者上面的选择栏开发,就个人感觉Tablayout用于主页导航栏会比BottomNavigationView更好,自定义方面也更容易.缺点是没有动画也不是Material Design设计模式的一部分.下面就讲解用于有导航栏的主页开发:</p>
<p> 一般主页导航栏与内容用Tablayout与<span style="color: rgba(0, 0, 0, 1)">Fragment配合使用</span></p>
<p><span style="color: rgba(0, 0, 0, 1)"> 1.第一种Tablayout + ViewPager + Fragment, 好处是可以左右滑动不需要自己实现滑动,并且可以有动画出现</span></p>
<p><span style="color: rgba(0, 0, 0, 1)"><span class="hljs-tag"><span class="hljs-title"><span style="color: rgba(0, 0, 0, 1)"> 2.第二种Tablayout + Fragment, 如果你不需要左右滑动就可以轻松的选择这个模式.</span></span></span></span></p>
<h1><span style="color: rgba(0, 128, 128, 1)">在xml里</span></h1>
<p> 因为有2种添加Item的方式,所以写法也可以是2个种</p>
<p> 第一种,这种方法可以直接配置Item的名称属性,<span style="color: rgba(255, 0, 0, 1)"><strong>注意!</strong></span><span style="color: rgba(0, 0, 0, 1)">这种方法还可以设置图标android:icon=</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">com.google.android.material.tabs.TabLayout
</span><span style="color: rgba(255, 0, 0, 1)">android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">com.google.android.material.tabs.TabItem
</span><span style="color: rgba(255, 0, 0, 1)">android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">com.google.android.material.tabs.TabItem
</span><span style="color: rgba(255, 0, 0, 1)">android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">com.google.android.material.tabs.TabLayout</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>第二种,这种需要自己在代码里添加子Item,并且可以实现自定义布局和View的Item(下面会说明在代码里添加Item)</p>
<div class="cnblogs_code" contenteditable="false">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">com.google.android.material.tabs.TabLayout
</span><span style="color: rgba(255, 0, 0, 1)">android:id</span><span style="color: rgba(0, 0, 255, 1)">="@+id/tablayout"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="0dp"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="56dp"</span><span style="color: rgba(255, 0, 0, 1)">
app:tabIndicatorHeight</span><span style="color: rgba(0, 0, 255, 1)">="0dp"</span><span style="color: rgba(255, 0, 0, 1)">
app:tabBackground</span><span style="color: rgba(0, 0, 255, 1)">="@android:color/transparent"</span><span style="color: rgba(255, 0, 0, 1)">
app:tabRippleColor</span><span style="color: rgba(0, 0, 255, 1)">="@android:color/transparent"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintBottom_toBottomOf</span><span style="color: rgba(0, 0, 255, 1)">="parent"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintLeft_toLeftOf</span><span style="color: rgba(0, 0, 255, 1)">="parent"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintRight_toRightOf</span><span style="color: rgba(0, 0, 255, 1)">="parent"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">com.google.android.material.tabs.TabLayout</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<h1><span style="color: rgba(22, 145, 121, 1)">需要自定义Item(下面用创建Tab的方式添加到TabLayout里,就前面说的代码里添加Item)</span></h1>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> addTabData() {
mTablayout </span>=<span style="color: rgba(0, 0, 0, 1)"> findViewById(R.id.tablayout);
String[] tabContentArray </span>= {"首页", "通知", "圈子", "我的"<span style="color: rgba(0, 0, 0, 1)">};
</span><span style="color: rgba(0, 0, 255, 1)">int</span>[] tabIconArray =<span style="color: rgba(0, 0, 0, 1)"> {R.drawable.ic_home_homepage, R.drawable.ic_home_notice, R.drawable.ic_home_circle, R.drawable.ic_home_my};
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i < 4; i++<span style="color: rgba(0, 0, 0, 1)">) {
TabLayout.Tab tab </span>= mTablayout.newTab();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">关键的创建一个Tab,注意这里使用的是已经实例的mTablayout创建的Tab,很容易疏忽使用new Tablayout().new Tab()的方式创建,这个是会报错的.</span>
View view = LayoutInflater.from(<span style="color: rgba(0, 0, 255, 1)">this</span>).inflate(R.layout.home_tab_item,mTablayout,<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">);
ImageView icon </span>=<span style="color: rgba(0, 0, 0, 1)"> view.findViewById(R.id.icon);
TextView content </span>=<span style="color: rgba(0, 0, 0, 1)"> view.findViewById(R.id.content);
icon.setImageResource(tabIconArray);
content.setText(tabContentArray);
tab.setCustomView(view);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (i == 0<span style="color: rgba(0, 0, 0, 1)">){
mTablayout.addTab(tab,</span>0,<span style="color: rgba(0, 0, 255, 1)">true</span>);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置选择的item</span>
}<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
mTablayout.addTab(tab);
}
}
}</span></pre>
</div>
<p>home_tab_item.xml</p>
<div class="cnblogs_code" contenteditable="false">
<pre><span style="color: rgba(0, 0, 255, 1)"><?</span><span style="color: rgba(255, 0, 255, 1)">xml version="1.0" encoding="utf-8"</span><span style="color: rgba(0, 0, 255, 1)">?></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">androidx.constraintlayout.widget.ConstraintLayout
</span><span style="color: rgba(255, 0, 0, 1)">xmlns:android</span><span style="color: rgba(0, 0, 255, 1)">="http://schemas.android.com/apk/res/android"</span><span style="color: rgba(255, 0, 0, 1)">
xmlns:app</span><span style="color: rgba(0, 0, 255, 1)">="http://schemas.android.com/apk/res-auto"</span><span style="color: rgba(255, 0, 0, 1)">
android:orientation</span><span style="color: rgba(0, 0, 255, 1)">="vertical"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="35dp"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">TextView
</span><span style="color: rgba(255, 0, 0, 1)">android:id</span><span style="color: rgba(0, 0, 255, 1)">="@+id/red_dot"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="10dp"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="10dp"</span><span style="color: rgba(255, 0, 0, 1)">
android:background</span><span style="color: rgba(0, 0, 255, 1)">="@drawable/bg_reddot"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintTop_toTopOf</span><span style="color: rgba(0, 0, 255, 1)">="@id/icon"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintLeft_toRightOf</span><span style="color: rgba(0, 0, 255, 1)">="@id/icon"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintRight_toRightOf</span><span style="color: rgba(0, 0, 255, 1)">="@id/icon"</span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">ImageView
</span><span style="color: rgba(255, 0, 0, 1)">android:id</span><span style="color: rgba(0, 0, 255, 1)">="@+id/icon"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="24dp"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="24dp"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintTop_toTopOf</span><span style="color: rgba(0, 0, 255, 1)">="parent"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintLeft_toLeftOf</span><span style="color: rgba(0, 0, 255, 1)">="parent"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintRight_toRightOf</span><span style="color: rgba(0, 0, 255, 1)">="parent"</span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">TextView
</span><span style="color: rgba(255, 0, 0, 1)">android:id</span><span style="color: rgba(0, 0, 255, 1)">="@+id/content"</span><span style="color: rgba(255, 0, 0, 1)">
android:textColor</span><span style="color: rgba(0, 0, 255, 1)">="@color/fontColorMain2"</span><span style="color: rgba(255, 0, 0, 1)">
android:textSize</span><span style="color: rgba(0, 0, 255, 1)">="@dimen/font_size_11"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_marginTop</span><span style="color: rgba(0, 0, 255, 1)">="2dp"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintTop_toBottomOf</span><span style="color: rgba(0, 0, 255, 1)">="@id/icon"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintLeft_toLeftOf</span><span style="color: rgba(0, 0, 255, 1)">="parent"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintRight_toRightOf</span><span style="color: rgba(0, 0, 255, 1)">="parent"</span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">androidx.constraintlayout.widget.ConstraintLayout</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p><span style="color: rgba(0, 0, 0, 1)">ic_home_homepage</span>.xml</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><?</span><span style="color: rgba(255, 0, 255, 1)">xml version="1.0" encoding="utf-8"</span><span style="color: rgba(0, 0, 255, 1)">?></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">selector </span><span style="color: rgba(255, 0, 0, 1)">xmlns:android</span><span style="color: rgba(0, 0, 255, 1)">="http://schemas.android.com/apk/res/android"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">android:state_selected</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)"> android:drawable</span><span style="color: rgba(0, 0, 255, 1)">="@mipmap/ic_home_page_select"</span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">android:state_selected</span><span style="color: rgba(0, 0, 255, 1)">="false"</span><span style="color: rgba(255, 0, 0, 1)"> android:drawable</span><span style="color: rgba(0, 0, 255, 1)">="@mipmap/ic_home_page"</span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">selector</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<h1><span style="color: rgba(22, 145, 121, 1)">Tablayout选中回调</span></h1>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> initTablayoutListener(){
mTablayout.addOnTabSelectedListener(</span><span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> TabLayout.OnTabSelectedListener() {
@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onTabSelected(TabLayout.Tab tab) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">选中某个tab</span>
<span style="color: rgba(0, 0, 0, 1)">
}
@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onTabUnselected(TabLayout.Tab tab) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">当tab从选择到未选择</span>
<span style="color: rgba(0, 0, 0, 1)">
}
@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onTabReselected(TabLayout.Tab tab) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">已经选中tab后的重复点击tab</span>
<span style="color: rgba(0, 0, 0, 1)">
}
});
}</span></pre>
</div>
<h1><span style="color: rgba(22, 145, 121, 1)">选中指定item</span></h1>
<p><span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 0, 1)">在代码里选中某一个TabItem,从select()方法就可以看出.就是希望你使用select()方法来切换item</span><br></span></p>
<div class="cnblogs_code">
<pre>mTabLayout.getTabAt(0).select();</pre>
</div>
<h1><span style="color: rgba(22, 145, 121, 1)"><strong>设置Tab的TextSize</strong></span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">首先你需要在styles.xml文件里创建这个文字属性的styles</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">style </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="TabLayoutTextStyle"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="android:textSize"</span><span style="color: rgba(0, 0, 255, 1)">></span>@dimen/font_size_16<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>然后在使用以下属性导入<span style="color: rgba(0, 0, 0, 1)">styles</span></p>
<div class="cnblogs_code" contenteditable="false">
<pre>app:tabTextAppearance="@style/TabLayoutTextStyle"</pre>
</div>
<h1><span style="color: rgba(22, 145, 121, 1)"><strong>如果你不需要选中下划线,可以使用这个属性取消</strong></span></h1>
<div class="cnblogs_code">
<pre>app:tabIndicatorHeight="0dp"</pre>
</div>
<h1><span style="color: rgba(22, 145, 121, 1)"><strong>如果你不需要点击后的阴影加涟漪动画效果,可以使用下面2个属性取消</strong></span></h1>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">app:tabBackground="@android:color/transparent"
app:tabRippleColor="@android:color/transparent"</span></pre>
</div>
<h1><span style="color: rgba(22, 145, 121, 1)">指示线的颜色</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">app:tabIndicatorColor </span></p>
<h1><span style="color: rgba(22, 145, 121, 1)">指示线的高度</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">app:tabIndicatorHeight </span></p>
<h1><span style="color: rgba(22, 145, 121, 1)">指示线是否铺满整个tab宽度,可以配合实现圆角</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">app:tabIndicatorFullWidth="false" </span></p>
<h1><span style="color: rgba(22, 145, 121, 1)">Tab选中时的字体颜色</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">app:tabSelectedTextColor </span></p>
<h1><span style="color: rgba(22, 145, 121, 1)">未选中字体颜色</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">app:tabTextColor="@color/colorPrimary" </span></p>
<h1><span style="color: rgba(22, 145, 121, 1)">设置背景颜色与选中背景颜色</span></h1>
<h2><span style="color: rgba(35, 111, 161, 1)">背景颜色</span></h2>
<p><span style="color: rgba(0, 0, 0, 1)">app:tabBackground="color" </span></p>
<h2><span style="color: rgba(35, 111, 161, 1)">选中背景颜色</span></h2>
<p>背景xml</p>
<div class="cnblogs_code" contenteditable="false">
<pre><?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_selected="true">
<shape android:shape="rectangle">
<solid android:color="@color/snakecommon_color_181B23"/>
</shape>
</item>
<item android:state_selected="false">
<shape android:shape="rectangle">
<solid android:color="@color/snakecommon_color_000000"/>
</shape>
</item>
</selector></pre>
</div>
<p>使用</p>
<div class="cnblogs_code">
<pre> app:tabBackground="@drawable/snake_tuya_shape_rectangle_000000"</pre>
</div>
<h1><span style="color: rgba(22, 145, 121, 1)"><strong>是否可以滚动</strong></span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">app:tabMode="scrollable" : 默认是fixed,固定的;scrollable:可滚动的</span></p>
<h1><span style="color: rgba(22, 145, 121, 1)">tab的最大最小宽度</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">app:tabMaxWidth="0dp" :</span></p>
<p><span style="color: rgba(0, 0, 0, 1)">app:tabMinWidth="0dp" :</span></p>
<h1><span style="color: rgba(22, 145, 121, 1)">tab的内边距</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">app:tabPaddingTop="0dp" :tab上内边距<br></span></p>
<p><span style="color: rgba(0, 0, 0, 1)">app:tabPadding="0dp" :tab的内边距</span></p>
<h1><span style="color: rgba(22, 145, 121, 1); background-color: rgba(255, 255, 255, 1)">tab的位置 </span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">app:tabGravity="center" :设置 fill 可以填充满item</span></p>
<h1><span style="color: rgba(22, 145, 121, 1)">自定义指示线</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">app:tabIndicator=<strong> </strong> : 注意!这里的指示线其实是<code class="prism language-xml has-numbering" style="position: unset"><span class="token tag"><span class="token attr-name"><span class="token namespace">android:state_selected<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"true<span class="token punctuation">"</span></span></span></span></span></span></span></code>的选中状态,所以如果单单写一个shape的xml文件设置是无法显示的,需要在写一个选中状态的xml。</span>参考如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">layer-list </span><span style="color: rgba(255, 0, 0, 1)">xmlns:android</span><span style="color: rgba(0, 0, 255, 1)">="http://schemas.android.com/apk/res/android"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item
</span><span style="color: rgba(255, 0, 0, 1)">android:bottom</span><span style="color: rgba(0, 0, 255, 1)">="8dp"</span><span style="color: rgba(255, 0, 0, 1)">
android:left</span><span style="color: rgba(0, 0, 255, 1)">="8dp"</span><span style="color: rgba(255, 0, 0, 1)">
android:right</span><span style="color: rgba(0, 0, 255, 1)">="8dp"</span><span style="color: rgba(255, 0, 0, 1)">
android:top</span><span style="color: rgba(0, 0, 255, 1)">="8dp"</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 设置边距 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">shape</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 设置圆角 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">corners </span><span style="color: rgba(255, 0, 0, 1)">android:radius</span><span style="color: rgba(0, 0, 255, 1)">="5dp"</span> <span style="color: rgba(0, 0, 255, 1)">/></span> <span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 设置边框 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">stroke
</span><span style="color: rgba(255, 0, 0, 1)">android:width</span><span style="color: rgba(0, 0, 255, 1)">="1dp"</span><span style="color: rgba(255, 0, 0, 1)">
android:color</span><span style="color: rgba(0, 0, 255, 1)">="@color/colorAccent"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">shape</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">layer-list</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">selector </span><span style="color: rgba(255, 0, 0, 1)">xmlns:android</span><span style="color: rgba(0, 0, 255, 1)">="http://schemas.android.com/apk/res/android"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">android:drawable</span><span style="color: rgba(0, 0, 255, 1)">="@drawable/indicator"</span><span style="color: rgba(255, 0, 0, 1)"> android:state_selected</span><span style="color: rgba(0, 0, 255, 1)">="true"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">selector</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<h1><span style="color: rgba(22, 145, 121, 1)"><strong> 改变字体大小与颜色</strong></span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">app:tabTextAppearance="@style/tab_layout_item_text" : 改变字体大小颜色等等,style参考如下:</span></p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">style </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="tab_layout_item_text"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="android:textSize"</span><span style="color: rgba(0, 0, 255, 1)">></span>16sp<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="android:textColor"</span><span style="color: rgba(0, 0, 255, 1)">></span>@color/color_18<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<h1><span style="color: rgba(22, 145, 121, 1)"><strong>TabLayout宽度填满</strong></span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">有时候你会发现TabLayout无法填满父类容器的宽度,在xml中添加下面三个属性,可以实现将宽度填充满</span></p>
<pre class="language-xml highlighter-hljs" data-dark-theme="true"><code> app:tabMaxWidth="0dp"
app:tabMode="fixed"
app:tabGravity="fill"</code></pre>
<h1><span style="color: rgba(22, 145, 121, 1)"><strong>TabLayout与ViewPager配合使用</strong></span></h1>
<p><span style="color: rgba(186, 55, 42, 1)"><strong>请注意,TabLayout与ViewPager配合使用是无法自定义标题Tab的View的。因为FragmentPagerAdapter会帮你实现标题Tab</strong></span></p>
<p><span style="color: rgba(0, 0, 0, 1)">代码</span></p>
<pre class="highlighter-hljs" data-dark-theme="true"><code>class HomeFragment : BaseFragment() {
private val mBinding by lazy { MainFragmentUsageBinding.inflate(layoutInflater) }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return mBinding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initView()
}
private fun initView() {
val list = listOf<String>("主页","消息","设置")
val fragmentList = mutableListOf<Fragment>()
list.forEachIndexed { index, pair ->
fragmentList.add(Fragment.newInstance())
}
/**
* 如果你的布局是在fragment里,可以选择childFragmentManager或者activity的parentFragmentManager
* 如果你的布局在activity里,则选择supportFragmentManager
*/
val myAdapter = MyAdapter(parentFragmentManager, fragmentList, list)
mBinding.usageDayViewPager.adapter = myAdapter
//setupWithViewPager方法是关键,它负责组合ViewPager与TabLayout
mBinding.tabLayout.setupWithViewPager(mBinding.usageDayViewPager)
}
}
/**
* FragmentPagerAdapter需要使用它来创建适配器
*/
class MyAdapter(fm: FragmentManager, val list: List<Fragment>, val titleList: List<String>) : FragmentPagerAdapter(fm) {
override fun getCount() = list.size
override fun getItem(position: Int): Fragment {
return list
}
/**
* 注意!TabLayout与ViewPager的组合会自己实现子Tab,所以子Tab的文字需要从这里提供
*/
override fun getPageTitle(position: Int): CharSequence? {
return titleList?.get(position)
}
}</code></pre>
<h1><span style="color: rgba(22, 145, 121, 1)"><strong>其他API</strong></span></h1>
<p><span style="color: rgba(0, 0, 0, 1)"><strong>以下是从View的源码里复制来的属性,以下属性仅做参考,有些并没有提供方法设置.比如tabTextSize 有归有,但是人家不提供方法设置..除非自己继承重写</strong><br></span></p>
<p><span style="color: rgba(0, 0, 0, 1)">int tabPaddingStart;<br>int tabPaddingTop;<br>int tabPaddingEnd;<br>int tabPaddingBottom;<br>int tabTextAppearance;<br>android.content.res.ColorStateList tabTextColors;<br>android.content.res.ColorStateList tabIconTint;<br>android.content.res.ColorStateList tabRippleColorStateList;<br>@androidx.annotation.Nullable<br>android.graphics.drawable.Drawable tabSelectedIndicator;<br>android.graphics.PorterDuff.Mode tabIconTintMode;<br>float tabTextSize;<br>float tabTextMultiLineSize;<br>final int tabBackgroundResId;<br>int tabMaxWidth;<br>private final int requestedTabMinWidth;<br>private final int requestedTabMaxWidth;<br>private final int scrollableTabMinWidth;<br>private int contentInsetStart;<br>int tabGravity;<br>int tabIndicatorAnimationDuration;<br>int tabIndicatorGravity;<br>int mode;<br>boolean inlineLabel;<br>boolean tabIndicatorFullWidth;<br>boolean unboundedRipple;</span></p>
<p> </p>
<p> </p>
<p> </p>
<p>end</p>
</div>
<div id="MySignature" role="contentinfo">
<div style="text-align: center">
<p style="color:orange;font-size:16px;" >本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/11039643.html </p>
<div style="color:orange;font-size:16px;">本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。 </div>
</div><br><br>
来源:https://www.cnblogs.com/guanxinjing/p/11039643.html
頁:
[1]