gpt4 book ai didi

android - 如何在自动调整 Android TextView 时出现 `wrap_content`?

转载 作者:行者123 更新时间:2023-12-04 11:11:44 25 4
gpt4 key购买 nike

考虑这种布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:autoSizeTextType="uniform"
android:gravity="center"
android:maxLines="1"
android:text="TextView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_max="50dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</android.support.constraint.ConstraintLayout>

因为 height_max约束这会导致 TextView,其中文本填充垂直空间,但 TextView 内部有很多水平填充:

autosized TextView

我想要的是设置 TextView 的宽度,使其与自动调整大小的文本内容的宽度相匹配。但是当我设置 android:layout_width="wrap_content"宽度是根据非自动调整大小的文本内容设置的:

non-autosized TextView

有什么方法可以两全其美——让文本根据已知高度自动调整大小,然后根据自动调整大小的文本的宽度设置宽度?

最佳答案

谷歌的 developer documentation特别建议不要使用 wrap_content使用自动调整大小的 TextView:

Note: If you set autosizing in an XML file, it is not recommended to use the value "wrap_content" for the layout_width or layout_height attributes of a TextView. It may produce unexpected results.



如果您只是希望文本的高度为 50dp 而不是 50sp,则可以将 textSize 设置为 50dp。但是我怀疑您的目标是拥有一个 textView ,它可以根据布局约束自动缩小文本的大小,并且该解决方案无法完成这项工作。

如果你真的不能通过使用 match_parent 的宽度在 TextView 上获得额外的水平空间或 0dp ,您可以尝试基于使用 TextPaint 测量文本以编程方式设置 textview 宽度布局参数创建布局后:
textView.post(new Runnable() {
@Override
public void run() {
TextPaint textPaint = new TextPaint();
textPaint.setTextSize(textView.getTextSize());

float width = textPaint.measureText(textView.getText().toString());

ViewGroup.LayoutParams layoutParams = textView.getLayoutParams();
layoutParams.width = (int)width;
textView.setLayoutParams(layoutParams);
}
});

请记住,如果您走这条路线,您可能需要为其添加一些左右填充。 TextViews 有一种内部填充,即使您将它们的填充设置为零 - 但是当直接设置宽度参数时,它会被覆盖。

关于android - 如何在自动调整 Android TextView 时出现 `wrap_content`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49266684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com