textView自动调整文本以填充宽度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了textView自动调整文本以填充宽度相关的知识,希望对你有一定的参考价值。

我有一个表格布局,其中有两列文字视图(参见下面的xml)。在小屏幕上,文本填充几乎所有空间,看起来很好。但是在更大的屏幕上会留下大量未使用的空间(更糟糕的是,左列和右列之间存在间隙)。

当有更多屏幕宽度可用时(尤其是横向),使文本大小增加的最佳方法是什么。也许它可以自动完成?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:ads="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mainLayout"
android:background="#E0F9FF"
tools:context=".MainActivity"
android:orientation="vertical">
<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scrollbars="vertical"
    android:layout_weight="1">
<TableLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="12dp"
    android:id="@+id/tableLayout" >
    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="@string/tbl_ipv4_ext"
            android:id="@+id/textView"
            android:layout_column="0"
            android:layout_weight="6"
            android:paddingBottom="10dp"
            android:paddingLeft="6dp"
            android:textStyle="bold|italic" />

        <TextView
            android:textIsSelectable="true"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="@string/tbl_no_connection"
            android:id="@+id/textView2"
            android:layout_column="10"
            android:layout_weight="9"
            android:textStyle="bold"/>
    </TableRow>        
<...many similar table rows...>
</TableLayout>
</ScrollView>
<com.google.android.gms.ads.AdView android:id="@+id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    ads:adSize="SMART_BANNER"
    ads:adUnitId="bla-bla-bla" />

答案

您可以使用StaticLayout并为您的宽度计算最佳字体大小,或者使用autofitTextView获取一些lib,例如:https://github.com/AndroidDeveloperLB/AutoFitTextView

另一答案

1-在项目gradle文件上导入android支持库26.x.x.如果IDE上没有支持库,则会自动下载。

dependencies {
    compile 'com.android.support:support-v4:26.1.0'
    compile 'com.android.support:appcompat-v7:26.1.0'
    compile 'com.android.support:support-v13:26.1.0' 
}

allprojects {
repositories {
    jcenter()
    maven {
        url "https://maven.google.com"
    }
  } 
}

2-打开布局XML文件,并像这个标记一样重构TextView。这种情况是:当系统增加字体大小时,将文本适合可用宽度,而不是自动换行。

<android.support.v7.widget.AppCompatTextView
        android:id="@+id/textViewAutoSize"
        android:layout_width="match_parent"
        android:layout_height="25dp"
        android:ellipsize="none"
        android:text="Auto size text with compatible lower android versions."
        android:textSize="12sp"
        app:autoSizeMaxTextSize="14sp"
        app:autoSizeMinTextSize="4sp"
        app:autoSizeStepGranularity="0.5sp"
        app:autoSizeTextType="uniform" />

以上是关于textView自动调整文本以填充宽度的主要内容,如果未能解决你的问题,请参考以下文章

在 ConstraintLayout 中自动调整多行文本视图的大小

Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小

以编程方式获取 TextView 的宽度

如何使用自动布局调整 UILabel 宽度以适合文本?

以编程方式调整TextView的大小

Android - 如何自动调整 TextView 的大小以适合固定高度的容器?