其他分享
首页 > 其他分享> > android – 自动缩放TextView文本以适应界限

android – 自动缩放TextView文本以适应界限

作者:互联网

我正在寻找一种最佳方法来调整TextView中包装文本的大小,使其适合其getHeight和getWidth界限.我不是简单地寻找一种包装文本的方法 – 我想确保它既包装又小到足以完全适合屏幕.

我在StackOverflow上看到了一些需要自动调整大小的情况,但它们或者是非常特殊的黑客解决方案案例,没有解决方案,或者涉及递归地重新绘制TextView,直到它足够小(这是内存密集和强制)用户观察文本逐步收缩每次递归).

但是我确信那里有人找到了一个很好的解决方案,不涉及我正在做的事情:编写几个重度例程来解析和测量文本,调整文本大小,然后重复直到找到一个合适的小尺寸.

TextView使用什么例程来包装文本?难道不能以某种方式用来预测文本是否足够小?

tl; dr:有一种最佳实践方法可以自动调整TextView的大小以适应,包装,在其getHeight和getWidth界限中吗?

解决方法:

从2018年6月起,Android正式开始支持Android 4.0(API级别14)及更高版本的此功能.
请查看:Autosizing TextViews

使用Android 8.0(API级别26)及更高版本:

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

编程方式:

setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, 
        int autoSizeStepGranularity, int unit)

textView.setAutoSizeTextTypeUniformWithConfiguration(
                1, 17, 1, TypedValue.COMPLEX_UNIT_DIP);

Android 8.0之前的Android版本(API级别26):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

  <TextView
      android:layout_width="match_parent"
      android:layout_height="200dp"
      app:autoSizeTextType="uniform"
      app:autoSizeMinTextSize="12sp"
      app:autoSizeMaxTextSize="100sp"
      app:autoSizeStepGranularity="2sp" />

</LinearLayout>

编程方式:

TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(
int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) 

TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(textView, 1, 17, 1,
TypedValue.COMPLEX_UNIT_DIP);

注意:TextView必须具有layout_width =“match_parent”或绝对大小!

标签:android,scale,textview,word-wrap
来源: https://codeday.me/bug/20190910/1802515.html