前言
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()等方法是否有效也是这样,具体看源码中的注释。
参考文章
历史上的今天
暂无评论...
随机推荐
SharedPreferences最后一次写入时断电偶尔存在不保存问题
前言最近测试反馈,播放音乐的信息断电时偶尔不记忆。项目中的记忆是使用sharedpreferences的,sharedpreferences是以xml文件保存,保存的位置在:/data/data/[包名]/shared_prefs测试反馈的关键字[断电]、[偶尔]和[不记忆],也就是说这...
Android图片旋转
前言Android对图片进行旋转记录。于Y轴往里面旋转。具体效果如图记录于此,方便自己查阅。正文直接上代码就是对ImageView的封装<com.biumall.reflectview.view.RotateView android:id="@+id/main_rev...
使用sqlite3命令
前言调试机器中大部分是带有sqlite3模块的,当然是一般而言啦,有些厂商不会让用户去操作这个的。本文摘抄部分sqlite3的操作命令,方便自己查阅。正文这里以Android 13中MediaProvider的数据库操作为例。进入sqlite3的操作界面进入adb shell# 进...
Android 8.0后音频焦点处理小结
前提两个或两个以上的 Android 应用可同时向同一输出流播放音频,系统会将所有音频流混合在一起。为了避免所有音乐应用同时播放,Android 引入了“音频焦点”的概念。一次只能有一个应用获得音频焦点。音频焦点采用合作模式对,合作模式,你可以准守也可以不准守。Android建议应用遵守...
朱自清:冬天
说起冬天,忽然想到豆腐。是一“小洋锅”(铝锅)白煮豆腐,热腾腾的。水滚着,像好些鱼眼睛,一小块一小块豆腐养在里面,嫩而滑,仿佛反穿的白狐大衣。锅在“洋炉子”(煤油不打气炉)上,和炉子都熏得乌黑乌黑,越显出豆腐的白。这是晚上,屋子老了,虽点着“洋灯”,也还是阴暗。围着桌子坐的是父亲跟我们哥儿三个。“洋...
Android Intent匹配及mimeType匹配
前言activity的启动分为显式调用和隐式调用。显式调用需要明确指定组件的信息。隐式调用是通过匹配目标组件的IntentFilter这里是记录一下如何使用匹配目标组建隐式启动Activity正文通过组建匹配,可以再不知道应用包名的情况启动对应的Activity(或者说应用),一个...