Android:如何动态设置TextView文本大小,以使文本不会换行到下一行

时间:2019-01-29 15:15:26

标签: android

我有这段代码。

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.8"
    android:orientation="vertical"
    android:id="@+id/textLayout"
    android:background="@drawable/vdaybg"
    android:gravity="center"
    android:layout_gravity="center">
    <TextView
        android:id="@+id/detail_text"
        android:text="hello"
        android:background="#55000000"
        android:lineSpacingExtra="5dp"
        android:textSize="30dp"
        android:textColor="@android:color/white"
        android:layout_margin="10dp"
        android:layout_gravity="center"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </TextView>
</LinearLayout>

我正在通过“活动”动态设置文本

detailText.setText(msg);
detailText.setTypeface(Utils.typeFaceBold);

现在,由于我要设置多行文本,因此较大的行将换行到下一行。 我想防止这种情况。 我要在线条弯曲时减小字体大小。

目前,我已经找到了这段代码来实现

public void correctWidth(TextView textView, int desiredWidth) {
        Paint paint = new Paint();
        Rect bounds = new Rect();

        paint.setTypeface(textView.getTypeface());
        float textSize = textView.getTextSize();
        paint.setTextSize(textSize);
        String text = textView.getText().toString();
        paint.getTextBounds(text, 0, text.length(), bounds);

        while (bounds.width() > desiredWidth)
        {
            textSize--;
            paint.setTextSize(textSize);
            paint.getTextBounds(text, 0, text.length(), bounds);
        }

        textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
    }

但是要传递的期望宽度是多少?能行吗?

1 个答案:

答案 0 :(得分:0)

您可以使用“自动调整TextView的大小”来定义多个文本大小。

<resources>
  <array name="autosize_text_sizes">
    <item>10sp</item>
    <item>12sp</item>
    <item>20sp</item>
    <item>40sp</item>
    <item>100sp</item>
  </array>
</resources>

<?xml version="1.0" encoding="utf-8"?>
<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:autoSizeTextType="uniform"
    android:autoSizePresetSizes="@array/autosize_text_sizes" />

这是Android开发者网站上的Autosizing TextViews官方文档。