Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TextViewCompat自动调整大小在8.0之前的Android操作系统中不起作用_Android_Android Appcompat - Fatal编程技术网

TextViewCompat自动调整大小在8.0之前的Android操作系统中不起作用

TextViewCompat自动调整大小在8.0之前的Android操作系统中不起作用,android,android-appcompat,Android,Android Appcompat,我正在尝试使用textview自动调整大小。我的应用程序需要支持Android 6.0 forward,所以我需要使用支持库,因为autosize textview直到8.0才添加。我需要按程序来做。我试着跟着。现在,我的代码如下所示: val label = TextView(context) label.text = i.label val value = TextView(context) value.text = i.valueFormatted value.textSize = 48f

我正在尝试使用textview自动调整大小。我的应用程序需要支持Android 6.0 forward,所以我需要使用支持库,因为autosize textview直到8.0才添加。我需要按程序来做。我试着跟着。现在,我的代码如下所示:

val label = TextView(context)
label.text = i.label
val value = TextView(context)
value.text = i.valueFormatted
value.textSize = 48f
label.textSize = 36f

TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(value, 1, 48, 1, TypedValue.COMPLEX_UNIT_DIP)
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(label, 1, 24, 1, TypedValue.COMPLEX_UNIT_DIP)
在较新的Android版本中,它看起来就像我想要的:

但在旧版本中,它是一团糟的:


您应该使用
AppCompatTextView
,而不是普通的
TextView

看看它是如何工作的:

它适用于8.1或更高版本的任何TextView,因为它是在8.1或更高版本中添加到框架中的。但在任何其他API级别上,传递的TextView都需要实现AutoSizeableTextView接口,而本机TextView类不这样做

public static void setAutoSizeTextTypeUniformWithConfiguration(
        @NonNull TextView textView,
        int autoSizeMinTextSize,
        int autoSizeMaxTextSize,
        int autoSizeStepGranularity,
        int unit) throws IllegalArgumentException {
    if (Build.VERSION.SDK_INT >= 27) {
        textView.setAutoSizeTextTypeUniformWithConfiguration(
                autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
    } else if (textView instanceof AutoSizeableTextView) {
        ((AutoSizeableTextView) textView).setAutoSizeTextTypeUniformWithConfiguration(
                autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
    }
}