3

我有文本视图:

<?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 的宽度和高度未更改。我究竟做错了什么?

4

3 回答 3

8

一旦显示,Android 不会使用“wrap_content”刷新视图布局。

所以如果你添加一个子视图,或者动态地修改内容,你就完蛋了。

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

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

另一种解决方案是给layout_width和layout_height设置固定值,在TextView上添加gravity="center",去掉wrap_content

希望能帮助到你!

于 2014-04-02T20:47:29.423 回答
0

对于现在和将来可能需要这个的任何人,我做了一个技巧来解决这个问题。如果您的 TextVew 在 LinearLayout 内,例如。,orientation="vertical"然后把这些:

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

当文本更改时,您的 TextView 将更新其高度。我不知道里面发生了什么,但这对我有用。

于 2019-09-14T07:40:35.063 回答
0

此问题的另一个解决方案是以编程方式删除 TextView,然后再次添加它。

linearLayout.removeView(textView)
linearLayout.addView(textView)

我知道这听起来很愚蠢,但它确实有效。在我的情况下,调用无效无效,只有这个有效。

根据您的实现,您需要处理其父级中的视图索​​引

于 2021-09-09T17:50:12.080 回答