Android TextView
Autosizing TextView
使用 Android 8.0(API 级别 26)及更高版本,可以让 TextView
文本大小自动扩展或收缩,以根据其TextView
特征和边界填充其布局 。此设置可以更轻松地使用动态内容优化不同屏幕上的文本大小。
Support Library 26.0 完全支持 TextView
在 Android 8.0(API 级别 26)之前运行 Android 版本的设备上的自动调整功能。该库提供对 Android 4.0(API 级别 14)及更高版本的支持。该android.support.v4.widget
软件包含TextViewCompat
以向后兼容方式访问功能的类
设置 TextView 自动调整大小
可以使用框架或支持库以 TextView
编程方式或以 XML 格式设置自动调整大小。要设置 XML 属性,还可以使用 Android Studio 中的“ 属性”窗口。
有三种方法可以设置自动调整 TextView
:默认, 粒度, 预设尺寸
注:如果设置在一个 XML 文件自动调整大小,不建议使用值“WRAP_CONTENT”为 layout_width
或layout_height
的属性TextView
。它可能会产生意外的结果。
默认
默认设置允许TextView
在水平轴和垂直轴上均匀地自动调整刻度。
要以 Code 方式定义默认设置,请调用
setAutoSizeTextTypeWithDefaults(int autoSizeTextType)
方法。提供AUTO_SIZE_TEXT_TYPE_NONE
关闭自动调整功能或AUTO_SIZE_TEXT_TYPE_UNIFORM
均匀缩放水平轴和垂直轴。注:为统一缩放的默认尺寸
minTextSize = 12sp
,maxTextSize = 112sp
以及granularity = 1px.
要在 XML 中定义默认设置,请使用
android
命名空间并将autoSizeTextType
属性设置为none或 _uniform_。```xml
<TextView
android:layout_width="match_parent" android:layout_height="200dp" android:autoSizeTextType="uniform" />
#### 使用支持库 - 要通过支持库以编程方式定义默认设置,请调用该`TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType)` 方法。提供`TextView`窗口小部件的实例和其中一种文本类型,例如 `TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE`或`TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM`。 - 要通过支持库在 XML 中定义默认设置,请使用 `app`命名空间并将`autoSizeTextType` 属性设置为*none*或*uniform*。 - ```xml <?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" /> </LinearLayout>
粒度
可以定义最小和最大文本大小的范围以及指定每个步骤大小的维度。的 TextView
均匀的最小和最大尺寸的属性之间的范围内的鳞片。每个增量按粒度属性中设置的步长进行。
- 要以编程方式定义文本大小范围和维度,请调用该
setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
方法。提供最大值,最小值,粒度值和任何TypedValue
维度单位。 - 要在 XML 中定义一系列文本大小和维度,请使用
android
命名空间并设置以下属性:- 将
autoSizeText
属性设置为none或uniform。none 是默认值,uniform可以TextView
在水平和垂直轴上均匀缩放。 - 设置
autoSizeMinTextSize
,autoSizeMaxTextSize
和autoSizeStepGranularity
属性以定义自动调整大小的维度TextView
。
- 将
- ```xml
<TextView
android:layout_width="match_parent" android:layout_height="200dp" android:autoSizeTextType="uniform" android:autoSizeMinTextSize="12sp" android:autoSizeMaxTextSize="100sp" android:autoSizeStepGranularity="2sp" />
#### 使用支持库 - 要通过支持库以编程方式定义文本大小范围和维度,请调用该`TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)` 方法。提供最大值,最小值,粒度值和任何`TypedValue`维度单位。 - 要定义范围的文本大小,并通过支持库中的 XML 格式的尺寸,使用的`app`命名空间和设置 `autoSizeText`,`autoSizeMinTextSize`, `autoSizeMaxTextSize`,和 `autoSizeStepGranularity`布局 XML 文件中的属性。 - ```xml <?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>
预设尺寸
预设尺寸允许您指定TextView
自动调整文本大小时选择的所有值 。
- 要使用预设大小以
TextView
编程方式设置自动调整大小 ,请调用该setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit)
方法。为尺寸提供尺寸和任何TypedValue
尺寸单位的数组。 - 要使用预设大小设置
TextView
XML 的自动调整大小,请使用android
命名空间并设置以下属性:- 将
autoSizeText
属性设置为none或uniform。none 是默认值,uniform可以TextView
在水平和垂直轴上均匀缩放。 - 将
autoSizePresetSizes
属性设置 为预设大小的数组。要将数组作为资源访问,请在res/values/arrays.xml
文件中定义数组。
- 将
- ```xml
- 10sp
- 12sp
- 20sp
- 40sp
- 100sp
- ```xml <?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" />
使用支持库
- 要使用预设大小
TextView
通过支持库以编程方式设置自动调整大小 ,请调用该TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit)
方法。提供TextView
类的实例,大小数组以及大小的任何TypedValue
维度单位。 - 要使用预设大小
TextView
通过支持库设置 XML 的自动调整大小 ,请使用布局 XML 文件中的app
命名空间和 setautoSizeText
和autoSizePresetSizes
attributes。 - ```xml
- 10sp
- 12sp
- 20sp
- 40sp
- 100sp
- ```xml <?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:autoSizePresetSizes="@array/autosize_text_sizes" /> </LinearLayout>
XML 中的字体
Android 8.0(API 级别 26)引入了一项新功能,即 XML 中的字体,它允许您将字体用作资源。您可以在font
文件res/font/
夹中添加文件以将字体捆绑为资源。这些字体在您的R
文件中编译,并在 Android Studio 中自动提供。您可以借助新资源类型访问字体资源font
。例如,要访问字体资源,请使用@font/myfont
或R.font.myfont
。
要在运行 Android 4.1(API 级别 16)及更高版本的设备上使用字体 XML 功能,请使用支持库 26.有关使用支持库的更多信息,请参阅 使用支持库部分。
要将字体添加为资源,请在 Android Studio 中执行以下步骤:
- 右键单击 res 文件夹,然后转到“ 新建”>“Android 资源目录”。将出现“ 新建资源目录”窗口。
- 在“资源类型”列表中,选择“ 字体”,然后单击“ 确定”。注意:资源目录的名称必须是 font
- 在字体文件夹中添加字体文件。下面的文件夹结构生成
R.font.dancing_script
,R.font.lobster
和R.font.typo_graphica
。
- 双击字体文件以在编辑器中预览文件的字体。
创建 font family
font family 是一组字体文件及其样式和重量详细信息。在 Android 中,您可以创建一个新的字体系列作为 XML 资源,并将其作为单个单元访问,而不是将每个样式和权重作为单独的资源引用。通过这样做,系统可以根据您尝试使用的文本样式选择正确的字体。
要创建字体系列,请在 Android Studio 中执行以下步骤:
右键单击该
font
文件夹,然后转到“ 新建”>“字体资源文件”。将出现“ 新建资源文件”窗口。输入文件名,然后单击“ 确定”。新的字体资源 XML 在编辑器中打开。
将每个字体文件,样式和权重属性包含在
<font
元素中。以下 XML 说明了在字体资源 XML 中添加与字体相关的属性:<?xml version="1.0" encoding="utf-8"?> <font-family xmlns:android="http://schemas.android.com/apk/res/android"> <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/lobster_regular" /> <font android:fontStyle="italic" android:fontWeight="400" android:font="@font/lobster_italic" /> </font-family>
在 XML 布局中使用字体
在TextView
对象或样式中使用字体,可以是单个字体文件,也可以是字体系列中的字体。要TextView
在样式中添加字体,请使用该 fontFamily
属性。 注意:当您使用字体系列时, TextView
交换机可以根据需要自行使用该系列中的字体文件。
将字体添加到 TextView
要为其设置字体TextView
,请执行以下操作之一:
在布局 XML 文件中,将
fontFamily
属性设置为要访问的字体文件。<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/lobster"/>
Android Studio 布局预览(如图 5 最右侧窗格所示)允许您预览中的字体集TextView
。
将字体添加到 Style
打开styles.xml
,并将fontFamily
属性设置为您要访问的字体文件。
<style name="customfontstyle" parent="@android:style/TextAppearance.Small">
<item name="android:fontFamily">@font/lobster</item>
</style>
在 Java/Kotlin 中使用字体
要在 Java/Kotlin 中使用字体,请调用getFont(int)
方法并提供要使用的字体 的资源标识符。此方法返回一个 Typeface
对象。虽然系统从字体信息中为您选择最佳样式,但您可以使用该 setTypeface(android.graphics.Typeface, int)
方法设置具有特定样式的字体。
Kotin
val typeface = resources.getFont(R.font.myfont)
textView.typeface = typeface
Java
Typeface typeface = getResources().getFont(R.font.myfont);
textView.setTypeface(typeface);
使用支持库
Support Library 26.0 在运行 Android 4.1(API 级别 16)及更高版本的设备上提供对 XML 字体功能的支持。
注意:通过支持库在 XML 布局中声明字体系列时,请使用app命名空间来确保加载字体
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font app:fontStyle="normal" app:fontWeight="400" app:font="@font/myfont-Regular"/>
<font app:fontStyle="italic" app:fontWeight="400" app:font="@font/myfont-Italic" />
</font-family>
在 Java/Kotlin 中使用字体,请调用 ResourceCompat.getFont(Context, int)
方法并提供 Context 和资源标识符的实例。