HorizontalScrollView 在 Android 中使用 AutoSize textView

HorizontalScrollView with AutoSize textView in Android

提问人:tycoon 提问时间:8/2/2022 更新时间:8/2/2022 访问量:69

问:

我想创建一个布局,其中 textview 会自动调整其中的文本大小,但在达到最小尺寸后,它应该开始滚动,就像在谷歌计算器中一样。像这样的东西

在填充整个宽度后,只需将 TextView 放在 HorizontalScrollView 中,它不会减小文本的大小。上图文本视图

我的代码:

<HorizontalScrollView
        android:id="@+id/scroll"
        android:background="@color/nHistoryBg"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:fillViewport="true"
        android:layout_gravity="end"
        android:layout_weight="4"
        >

            <TextView
                android:id="@+id/tvHistory"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:gravity="center_vertical|end"
                android:textStyle="bold"
                android:maxLines="1"
                android:paddingStart="10dp"
                android:paddingEnd="20dp"
                android:autoSizeMinTextSize="@dimen/histMinSz"
                android:autoSizeMaxTextSize="@dimen/histMaxSz"
                android:autoSizeTextType="uniform"
                />

    </HorizontalScrollView>
android-layout

评论

0赞 Mirco0 8/2/2022
如果将水平滚动视图设置为 ?android:layout_widthwrap_content
0赞 tycoon 8/2/2022
@Mirco0宽度为 wrap_content 不起作用,高度为 wrap_content 会将 textsize 设置为最小文本大小

答:

0赞 Kishan Mevada 8/2/2022 #1

设置 TextView 自动调整大小

您可以使用框架或支持库以编程方式或在 .要设置属性,您还可以使用 Android Studio 中的 Properties 窗口。TextViewXMLXML

有三种方法可以设置自动调整大小:TextView

  • 违约
  • 粒度
  • 预设尺寸

违约

默认设置允许在水平轴和垂直轴上均匀地自动调整缩放大小。TextView

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

粒度

您可以定义最小和最大文本大小的范围,以及指定每个步骤大小的尺寸。在最小和最大大小属性之间的范围内均匀缩放。每个增量都按照粒度属性中设置的步长进行。TextView

<?xml version="1.0" encoding="utf-8"?>
<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:autoSizeTextType="uniform"
    android:autoSizeMinTextSize="12sp"
    android:autoSizeMaxTextSize="100sp"
    android:autoSizeStepGranularity="2sp" />

预设尺寸

预设大小允许您指定在自动调整文本大小时选取的所有值。TextView

将属性设置为“无”或“统一”。None 是默认值,uniform 允许在水平轴和垂直轴上均匀缩放。autoSizeTextTextView

将属性设置为预设大小的数组。若要将数组作为资源进行访问,请在文件中定义数组。autoSizePresetSizesres/values/arrays.xml

<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" />

更多细节,可以关注谷歌官方文档Autosizing TextViews

评论

0赞 tycoon 8/2/2022
不,问题不在于调整 textView 的大小,正如您在第二个 gif 中看到的那样,我有一个不在 HorizontalScrollView 中的 textView,可以调整其文本大小。问题是关于调整 HorizontalScrollView 中的文本大小,正如您在谷歌计算器的第一个动画中看到的那样