基于TabLayout中的Tab间隔设置方法(实例讲解)
作者:Dway 发布时间:2023-12-05 06:56:10
标签:TabLayout,Tab,间隔,设置
TabLayout和ViewPager搭配使用,是有很多方便性,但是TabLayout这东西还是有很多被人吐槽的地方。
这里只讲怎么设置tab之间的间隔,网上找了一堆方法,什么padding和margin的啥都没用,没办法,想用TabLayout只能自己想办法了。效果如下:
一、实现方法,既然这东西不好设置,那就直接在背景上做点事情,布局代码如下:
<android.support.design.widget.TabLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/tl_download_tabs"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:layout_gravity="center_horizontal"
android:overScrollMode="never"
app:tabMode="fixed"
app:tabPaddingStart="30dp"
app:tabPaddingEnd="30dp"
app:tabIndicatorHeight="0dp"
app:tabBackground="@drawable/download_tab_bg_selector"
app:tabSelectedTextColor="#000000"
app:tabTextColor="#ffffff"/>
二、其中关键的地方就在背景的selector上,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<!--<shape>
<solid android:color="#ffffff"/>
<corners android:topLeftRadius="10dp" android:topRightRadius="10dp" />
</shape>-->
<!--为了让TabLayout内部的Tab有间隔,暂时找不到其他设置方法,只能在背景图形里面设置间隔-->
<layer-list>
<item>
<shape>
<solid android:color="@android:color/transparent"/>
</shape>
</item>
<item android:left="5dp" android:right="5dp">
<shape>
<corners android:topLeftRadius="10dp" android:topRightRadius="10dp" />
<solid android:color="#ffffff"/>
</shape>
</item>
</layer-list>
</item>
<item android:state_selected="false">
<!--<shape>
<solid android:color="#bcbcbc"/>
<corners android:topLeftRadius="10dp" android:topRightRadius="10dp" />
</shape>-->
<layer-list>
<item>
<shape>
<solid android:color="@android:color/transparent"/>
</shape>
</item>
<item android:left="5dp" android:right="5dp">
<shape>
<corners android:topLeftRadius="10dp" android:topRightRadius="10dp" />
<solid android:color="#bcbcbc"/>
</shape>
</item>
</layer-list>
</item>
</selector>
注释掉的地方是原来没间隔的selector,这里直接给背景设置了个左右的padding,效果杠杠的。
缺点:如果间隔过大的话,那这种方式就有一点的缺陷了,就是点击到空白处,也能选中tab。
不过对于间隔不是很大的,基本是感觉不出来的。
三、Activity的使用就很简单了:
TabLayout mTabLayout = (TabLayout) findViewById(R.id.tl_download_tabs);
mTabLayout.addTab(mTabLayout.newTab().setText("已下载"));
mTabLayout.addTab(mTabLayout.newTab().setText("下载中"));
mTabLayout.setupWithViewPager(mViewPager);
四、原来是线性布局下,放着TabLayout和ViewPager,试着在TabLayout外嵌套多一个RelativeLayout,发现出来的效果Tab的文字不显示了,至于网上说的调换addTab和setupWithViewPager的顺序也是坑,可以看到显示,但是出现了更离谱的情况,前面两个空白,后面还多了两个正常的,反正是很奇葩。
最后还是得在Adapter中去处理,把以下方法重写下就可以了,其实这样可能更合理些,至少能保证Tab的数量和ViewPager的页数是一致的。
@Override
public CharSequence getPageTitle(int position) {
if(position == 0){
return "已下载";
}else if(position == 1){
return "下载中";
}
return "";
}
来源:http://blog.csdn.net/lin_dianwei/article/details/78806816


猜你喜欢
- Unity没有像Vs那样的“*.sln”的项目工程文件,不能通过这个文件来打开工程。但是原有的打开已有工程的方法太过于麻烦了,则现在来通过添
- AOP拦截Controller获取@PathVariable注解传入参数前言:最近项目中需要对controller传入的应用标识(appMa
- 本文为大家介绍了java图片添加水印实例代码,java实现水印还是非常方便的,水印可以是图片或者文字,具体内容如下package micha
- groovy是一种动态脚本语言,适用于一些可变、和规则配置性的需求,目前Spring提供ScriptSource接口,支持两种类型,一种是R
- logback过滤部分日志输出场景使用监控异常日志进行告警时,部分异常日志可能只是不需要告警,但无法通过编码去除时,可以通过不输出这类异常日
- 本文实例讲述了Android仿百度谷歌搜索自动提示框AutoCompleteTextView简单应用。分享给大家供大家参考,具体如下:现在我
- 在java开发中,类、接口、方法,都需要进行注释,注释内容如图:注释中的基本元素有:描述、作者、创建日期。可增加元素有:修改日期、修改内容、
- 目录一、简介二、入门案例三、自定义认证逻辑四、自定义授权逻辑五、注销登录六、记住我功能七、会话管理一、简介Spring Security是一
- 编辑上传文件的页面upload.html注意事项:上传方式使用POST不能使用GET(GET不能上传文件)表单 enctype 属性应该设置
- Java执行hadoop的基本操作实例代码向HDFS上传本地文件public static void uploadInputFile(Str
- 将自然语言编写的测试用例转换为可执行的测试,可以大大降低需求与开发之间的沟通成本,这是BDD(行为驱动开发)希望达到的效果。SpecFlow
- 最近工作遇到一个需求,需要下载excel模板,编辑后上传解析存储到数据库。因此为了更好的理解公司框架,我就自己先用spring mvc实现了
- 要说在 Spring Boot 中注册过滤器有三种方式,你都能想到哪些呢?今天松哥就来和大家聊一聊 Spring Boot 中注册过滤器的三
- 背景在开发中,如果用try catch的方式,每个方法都需要单独实现,为了方便分类异常,返回给前端,采用了@ControllerAdvice
- 调用微信接口前需要准备的内容。1.微信公众平台的appid2.微信公众平台的secret3..获取tokenid4.获取ticket5.生成
- 这篇文章主要介绍了Java如何把数组转换为ArrayList,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 我们在想对一个可枚举的对象集合进行去重操作时,一般第一个想到的就是就是Linq的Distinct方法。先定义一个类,然后使用Distinct
- 需求分析需求一:图片列表查询,从后台返回数据,将数据展示在页面上需求二:新增图片,将新增图书的数据传递到后台,并在控制台打印说明:此次案例的
- 在Update函数中执行:if (turnAround) { playerCamera.RotateA
- 在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进