- 作者:老汪软件技巧
- 发表时间:2024-12-13 04:03
- 浏览量:
在布局中Icon+文字组成一个视觉上的元素是非常普遍的需求,或者是成为一个可点击的整体,或者是展示某种信息。比如一些标签类的视频元素,再比如顶部导航栏(ActionBar或者是自已定义实现的类似功能的)都会有一个返回,通常都是一个向左的Icon加上一个文字标签。
这种需求实现起来也是非常的简单,同学们也能很快的写出来,一个ImageView加上一个TextView,外面再包一层LinearLayout或者RelativeLayout。Okay,这没有问题,但有更好的实现方式,这需要三个View对象,一个外层group,一个ImageView一个TextView,可以仅使用一个TextView对象,达到同样的效果。
TextView的drawable属性
TextView有一些属性可以在Text的四周设置一个drawable对象,图片,shape等合法的drawable都可以用。
就像其名字所暗示的那样,left/top/right/bottom就是在文字的上下左右放置drawable。而drawableStart和drawableEnd则有特殊的意义,虽然它们是API 14加上去的,但是要在API 17后才能真正的生效,它们的作用是当语言方向发生变化时,会换边,LTR语言drawableStart在左边,而drawableEnd在右边;但对于RTL语言来说就会反过来drawableStart在右,drawableEnd在左。可以看这个解释。
<TextView android:text="Text along with Image\nsecond\nthird\nforth\nfifth" android:layout_width="400dip"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_launcher"
android:drawableLeft="@drawable/ic_launcher"
android:textSize="16sp"

android:paddingTop="10dip"
android:paddingBottom="10dip"
android:paddingLeft="10dip"
android:gravity="center"
android:drawablePadding="5dip"/>;
TextView的drawable的一些注意事项TextView的padding作用在drawable之外TextView的高度或宽度为wrap_content时将是文字和drawable中较大的那一个,再加上padding和margingravity只对文字起作用,对drawable不起作用drawable会在其所在的维度居中显示,比如drawableLeft是上下垂直居中的,以此类推局限性
有些时候它也有一些局限性而没有办法用它:
当drawable本身没有高度时(比如shape),这个drawable高度就会依赖于文字,因为padding是加在drawable之外,所以只会依赖于文字的高度。有些时候这不是想要的结果。当Icon需要与文字分开单独控制时,很明显这要分成二个View。当需要对Icon进行特殊的个性化时,比如添加背景,特效等。其他一些造成无法使用的。除上述情况外,就要考虑使用drawable了。Why bother?
有同学可能会问,有什么区别,为啥费这么大劲折腾,也就省了二个view对象而已嘛?这位同学可以坐下了,孤来说明下:首先,作为开发者要有永不止境的学习和优化的意识,即使带来的效果是微小的,能用一个对象搞定的,为啥用三个呢?其次,对于整体不复杂的页面,这样带来的效果确实不明显,但是对于超复杂的页面,页面的布局有上百个View时,比如Launcher或者一些巨复杂的应用,就会带来明显的收益。还有,汇集小溪而成大河,把所有小的点都优化到了极致,那么整体肯定会得到质的飞跃。
学无止境,技术上的优化也无止境啊!把事情做到极致应是工程师追求的目标!