亲测,设置四个pading值,为负值,测试各种情况,不是所有情况有效?其原理不明白,望高手解答,谢啦
首先声明 这个我还没有亲测 但我猜测你这个 paddingleft 与paddingtop 应该有效 你想隐藏也要看控件距屏幕的距离 如果直接设置padding 就会发生冲突 因为不知道到底要不要隐藏
你可以自己再去测试下我这种猜测
2 回答1.3k 阅读✓ 已解决
2 回答2.7k 阅读
2 回答1.8k 阅读
1 回答2.1k 阅读
1 回答1.2k 阅读
1 回答1.2k 阅读
1 回答599 阅读✓ 已解决
在我的理解中, 设置 padding 为负值和设置为0在显示上不会有什么区别, 所以, 你想要的效果是什么?
OK, 之前没有自习考虑这个问题, 现在帮你分析一下.
首先, 从 xml 中解析 padding 值是在父类 View 中进行的, 在 View 的 构造方法中可以看到下面的代码:
从上面的代码可以看到, 如果通过设置
android:padding
的方式, 那么只有当 padding 值大于等于0才会被赋值给上下左右的 padding. 这就解释了为什么我的实验中 padding 为负值并不会有影响. 同时在调用internalSetPadding()
方法时, 上下 padding 值都对是否为负值做了判断, 以保证其为正值, 所以我使用你的代码中的参数, 但是将android:paddingTop
设为负值也没有出现文字不可见的情况.接下来, View 在自己的区域中如何进行绘制是由每一个 View 的子类自己实现的, 并不是所有的 View 子类都会有设置
paddingLeft
会使内容截断甚至隐藏的情况, 至少目前我试了以后发现只有 TextView 及其子类会. OK, 那看一下 TextView 是怎么绘制文字的:从上面 TextView 类的 onDraw 方法中可以看到, 在
canvas.translate(compoundPaddingLeft, extendedPaddingTop + voffsetText);
这一句中, 画布 canvas 对象进行了平移, 而在这之前并没有对
compoundPaddingLeft
进行负值判定, 因此, 对 TextView 设置android:paddingLeft
是会使内容文字被截掉的.所以, 题主想要的"原理"其实很简单, 那就是每一个 View 子类里面的内容怎么绘制是由它的
onDraw()
方法确定的. (当然还有draw()
,dispatchDraw()
这些, 不细说.)