更改文本大小后适应TextView内容

4
我有一个文本视图:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="@drawable/item_table_light_grey"
          android:gravity="center"
          android:orientation="vertical" >

    <TextView
            android:id="@android:id/text1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#000000"
            />
</LinearLayout>

当我使用代码更改文本大小时
TextView textView = (TextView) view.findViewById(android.R.id.text1);
textView.setTextSize(adapter.getTextSize());

我改变了文本大小,但textView的宽度和高度没有改变。我做错了什么吗?


1
这只是一种猜测,但如果您通过textView.requestLayout();textView.invalidate();强制重绘视图会发生什么? - Sam
@Sam 改变文本大小也会影响 TextView 的 width() 和 height() 吗? - Pragnani
宽度和高度被设置为wrap_content,因此就像调用setText()将自动更改宽度和高度一样。我认为调用setTextSize()不应需要setWidth()setHeight() - Sam
是的,我也猜到了,如果设置了'wrap_content',宽度和高度必须自动更改。但实际上并没有发生变化。setHeight() 和 setWidth() 方法没有改变任何东西(textView 的宽度和高度没有改变)。所以这就是问题所在... - Shox
invalidate()和requestLayout()也已经被使用了。但是什么也没有发生。 - Shox
@Sam 同意,我错了...我已经测试过了,当我改变文本大小时,宽度和高度也会改变。 - Pragnani
3个回答

9

Android不会在显示后刷新使用“wrap_content”的视图的布局。

因此,如果您添加了子视图或动态修改内容,则会出现问题。

为解决这个问题,我编写了一个静态类,重新计算大小并强制更新使用“wrap_content”的视图的布局。代码和使用说明可在此处找到:

https://github.com/ea167/android-layout-wrap-content-updater

另一种解决方案是将layout_width和layout_height设置为固定值,在TextView上添加gravity =“center”,并删除wrap_content。

希望对您有所帮助!


0
另一个解决此问题的方法是通过编程方式删除TextView,然后再次添加它。
linearLayout.removeView(textView)
linearLayout.addView(textView)

我知道这听起来很蠢,但它可以运行。 在我的情况下,调用 invalidate 没有起作用,只有这个起作用。

根据您的实现,您需要注意视图在其父级中的索引。


0

对于现在或未来可能需要的任何人,我有一个技巧来解决这个问题。如果您的TextView位于LinearLayout内,例如具有orientation="vertical",则请添加以下内容:

android:layout_height="wrap_content"
android:layout_weight="1"

将文本设置到您的TextView中,当文本发生更改时,它的高度将被更新。 我不知道内部发生了什么,但这对我起作用了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接