这次故事主人翁还是tablayout,在github看官方demo的时候https://github.com/googlesamples/android-media-controller,效果图有一个指示器效果,于是我点进去看了代码,手贱改了一点东西发现了一点问题

1. 官方demo ViewPage指示器效果图

实现原理也很简单 使用tablayout,核心代码片段如下

代码中绑定tablayout和viewpager

final TabLayout pageIndicator = findViewById(R.id.page_indicator);

pageIndicator.setupWithViewPager(mViewPager);

android:id="@+id/page_indicator"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="bottom"

android:background="@android:color/transparent"

app:tabBackground="@drawable/tab_indicator"

app:tabGravity="center"

app:tabIndicatorHeight="0dp" />

tabBackground属性就是指示器单个圆的样式,drawable/tab_indicator代码如下

android:innerRadius="0dp"

android:shape="ring"

android:thickness="3dp"

android:useLevel="false">

android:innerRadius="0dp"

android:shape="ring"

android:thickness="3dp"

android:useLevel="false">

以上代码就能实现简单的位于界面下方居中的viewpager指示器了,如果要选中的圆大一点的效果就

改一下上面

android:innerRadius="0dp"

android:shape="ring"

android:thickness="改成你想要的选中大小"

android:useLevel="false">

我这里改了10dp效果如下

这样指示器的效果就出来了,很简单,但是这不是本文的重点。

2. 重点来了,谁限制了我的宽度!

手抖了一下把 选中圆的thickness属性值改成了100dp结果就出现了很诧异的一幕了,效果图如下

然后发现虚拟机(限宽为64px)和手机(限宽为72px)这个限制宽度不一致,应该是和分辨率有关的,系统设置的一个默认值。

来fuck源码看看这是怎么回事!

通过fuck源码发现居然自己调用了padding赋值语句,官方sample代码里面xml里面都没有设置padding啊,继续fuck

原来在这设置的

在TabView构造函数就调用了setPaddingRelative,而mTabPaddingStart和mTabPaddingEnd仅在TabLayout构造方法里面赋值,但是官方sample代码里面xml里面都没有设置mTabPaddingStart和mTabPaddingEnd所有这个是系统默认值。

我们肯定不能让系统默认值干扰我们指示器的 android:thickness的大小,因此建议在TabLayout声明的xml中加入

app:tabPaddingStart="选中状态的android:thickness值/2"

app:tabPaddingEnd="选中状态的android:thickness值/2"

当然这里选中状态的android:thickness值/2只是参考,你可以自己设置咯,本文结束

android view padding,记一次tablayout的tabView偷偷自带padding的问题相关推荐

  1. 关于android.view.WindowLeaked(窗体泄露)的解决方案

    虽然是小问题一个,但也困扰了我一段时间,现在记下来,给自己做个备忘,也可以给其他人一个参考 Java代码   view plaincopy to clipboardprint? 01-08 01:49 ...

  2. Android View 测量流程(Measure)完全解析

    前言 上一篇文章,笔者主要讲述了DecorView以及ViewRootImpl相关的作用,这里回顾一下上一章所说的内容:DecorView是视图的顶级View,我们添加的布局文件是它的一个子布局,而V ...

  3. 关于android.view.WindowLeaked的解决方案

    虽然是小问题一个,但也困扰了我一段时间,现在记下来,给自己做个备忘,也可以给其他人一个参考 1.01-08 01:49:27.874: ERROR/WindowManager(473): Activi ...

  4. Android View体系(十)自定义组合控件

    相关文章 Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源 ...

  5. 你需要知道的Android View的布局

    上一篇我们分析Android View的测量.我们先回顾一下,View的测量,在ViewRootImpl#performTraverals方法下,先进行对DecorView根布局测量获取Measure ...

  6. 【Android View绘制之旅】Layout过程

    1.为什么要进行Layout? 在[Android View绘制之旅]View之测量Measure过程后,View我们得到View的宽高,但光只有宽高值是不足以反映视图的,更需要知道View所在的位置 ...

  7. 关于android.view.WindowLeaked异常的解决方案

    虽然是小问题一个,但也困扰了我一段时间,现在记下来,给自己做个备忘,也可以给其他人一个参考. Android.view.WindowLeaked按字面了解,Window Leaked大概就是说一个窗体 ...

  8. android view滑动到顶部并固定在顶部

    创建自定义ScrollView /** * ProjectName: yuanxinclan_new * Author: lgq * Date: 2017/12/20 0020 10:07 */ pu ...

  9. Android View 绘制流程

    前面讲到 Android View 加载流程,使用 LayoutInflater 将 xml 文件转变成 View ,但是还需要将 View 绘制出来,才能被用户看到,这一过程为绘制流程.由于 And ...

最新文章

  1. 独家 | 你的神经网络不起作用的37个理由(附链接)
  2. Groovy—沉睡的雄狮
  3. 网络通信-2(TCP通信、ServerSocket、Socket)
  4. 大数据泄露你的行踪?隐私不再是隐私
  5. php 获取视频首帧,从视频中提取特定帧的最快方法(PHP/ffmpeg/anything)
  6. Linux下调用fork或system启动子进程的信号和资源释放相关问题
  7. Python使用pip自动升级所有第三方库
  8. 建立可视化决策平台,“数据化”首当其冲!
  9. Powerset:超越Google的搜索引擎?
  10. drop out, learning rate in nn
  11. 新手请教个问题,有关cocos2d-x
  12. C/C++,pascal函数调用约定
  13. 6.Linux中的进程管理
  14. MATLAB绘图总结
  15. linux redis-trib.rb,redis集群配置 执行 redis-trib.rb 报错解决方法
  16. TCP粘包以及UDP丢包问题
  17. pandas按行、按列合并数据
  18. C语言实现连接MySQL服务器CURD
  19. 在线思维导图怎么用?MindNow给你分享
  20. 利用幂级数性质解级数求和问题

热门文章

  1. 1.8 finally和return的执行顺序
  2. Python之多进程
  3. 91. 最短Hamilton路径【状压DP】
  4. ACM入门之【读入、输出优化】
  5. 【PAT乙级】1019 数字黑洞 (20 分)
  6. 项目: 用Easyx绘制围棋和象棋的棋盘
  7. easyUI的中文乱码问题
  8. linux文件的定义变量的值,linux $变量含义($0,$1,$2,$#,$@) ----linux 基础
  9. 【开机自启】属于你的个性化!八步完成喜欢的软件开机自启!
  10. Linux最常用命令:简单易学,但能解决95%以上的问题