前言
TextView.setWidth()失效(无作用),其实好奇,既然没作用,为啥要预留这个方法呢?
正文
既然要刨根问底,就需要看源码TextView。
看了一下源码TextView.setWidth()
//[来自谷歌翻译] //将 TextView 的宽度设置为精确的像素宽度。 //如果 LayoutParams 不强制 TextView 具有精确的宽度,则此值用于宽度计算。 //设置此值将覆盖之前的最小/最大宽度配置,例如 setMinWidth(int) 或 setMaxWidth(int)。 @android.view.RemotableViewMethod public void setWidth(int pixels) { mMaxWidth = mMinWidth = pixels; mMaxWidthMode = mMinWidthMode = PIXELS; requestLayout(); invalidate(); }
哈哈,看了源码就会发现,是否有效,具体看TextView的xml配置。重点在:
如果 LayoutParams 不强制 TextView 具有精确的宽度,则此值用于宽度计算。
下面单独对有效和无效就行介绍。
有效xml配置
<TextView android:id="@+id/play_tv_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/white" android:textSize="20sp" />
或者
<TextView android:id="@+id/play_tv_time" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@android:color/white" android:textSize="20sp" />
此时对TextView设置setWidth()是有效的
mTvTime = mRootView.findViewById(R.id.play_tv_time); //这里是直接设置了100 mTvTime.setWidth(100); //不是很推荐上面方式,可以考虑下面的 //int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics()); mTvTime.setWidth(width);
也就是android:layout_width=""中的配置不要固定精确值,此时Java中setWidth()是有效的。
无效xml配置
<TextView android:id="@+id/play_tv_time" android:layout_width="80dp" android:layout_height="wrap_content" android:textColor="@android:color/white" android:textSize="20sp" />
此时对TextView设置setWidth()是无效的
既然无效,那如何解决呢,下面也展示解决的方法。
private void updateViewWidth(TextView textView, int width) { if (null == textView || width < 0) { return; } ViewGroup.LayoutParams layoutParams = textView.getLayoutParams(); layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, width, getResources().getDisplayMetrics()); textView.setLayoutParams(layoutParams); }
小结
-
看源码后发现,其实TextView.setWidth()并不是一直无效,是根据xml中的配置而定。
-
TextView.setHeight()等方法是否有效也是这样,具体看源码中的注释。
参考文章
历史上的今天
暂无评论...
随机推荐
MediaScanner源码分析
前言上一篇《MediaProvider源码分析》分析到,正在对多媒体的扫描是在MediaScanner中,因此进入就进一步分析多媒体扫描逻辑。这里是用了Android P源码分析,只能是个人流水账哈涉及代码目录#javaframeworks\base\media\java\andro...
汪曾祺:端午的鸭蛋
家乡的端午,很多风俗和外地一样。系百索子。五色的丝线拧成小绳,系在手腕上。丝线是掉色的,洗脸时沾了水,手腕上就印得红一道绿一道的。做香角子。丝线缠成小粽子,里头装了香面,一个一个串起来,挂在帐钩上。贴五毒。红纸剪成五毒,贴在门槛上。贴符。这符是城隍庙送来的。城隍庙的老道士还是我的寄名干爹,他每年端午...
三毛:故乡人
我们是替朋友的太太去上坟的。朋友坐轮椅,到了墓园的大门口,汽车便不能开进去,我得先将朋友的轮椅从车厢内拖出来,打开,再用力将他移上椅子,然后慢慢的推着他。他的膝上放着一大束血红的玫瑰花,一边讲着闲话,一边往露斯的墓穴走去。那时荷西在奈及利亚工作,我一个人住在岛上。我的朋友尼哥拉斯死了妻子,每隔...
叔本华:比读书更重要的是什么
不管任何藏书丰富的图书馆,假如不加整顿杂乱无章的话,它给予我们的利益还不如那些规模小藏书少,但整理得条理井然、分类清楚的图书馆,同理,不管你学识如何的渊博,如若不能反复思维咀嚼消化的话,它的价值,远逊于那些所知不多但能予以深思熟虑的知识。何以言之?因为我们若要将所学得的知识消化吸收,变为己有,并且能...
林徽因:笑
笑的是她的眼睛,口唇,和唇边浑圆的旋涡。艳丽如同露珠,朵朵的笑向贝齿的闪光里躲。那是笑——神的笑,美的笑;水的映影,风的轻歌。 笑的是她惺松的鬈发,散乱的挨着她的耳朵。轻软如同花影,痒痒的甜蜜涌进了你的心窝。那是笑——诗的笑,画的笑:云的留痕,浪的柔波。选自《...
Date常用格式转换
前言记录一下,Date常用格式的转换。记录于此,方便自己查阅。好记性不如烂笔头正文Date对象# 创建date对象Date date = new Date();# 获取当前时间Date date = new Date(System.currentTimeMillis());当...