Android TextView


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_widthlayout_height的属性TextView。它可能会产生意外的结果。

默认

默认设置允许TextView在水平轴和垂直轴上均匀地自动调整刻度。

  • 要以 Code 方式定义默认设置,请调用 setAutoSizeTextTypeWithDefaults(int autoSizeTextType) 方法。提供AUTO_SIZE_TEXT_TYPE_NONE关闭自动调整功能或AUTO_SIZE_TEXT_TYPE_UNIFORM均匀缩放水平轴和垂直轴。

  • :为统一缩放的默认尺寸minTextSize = 12spmaxTextSize = 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命名空间并设置以下属性:
  • ```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 属性设置为noneuniformnone 是默认值,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命名空间和 set autoSizeTextautoSizePresetSizesattributes。
  • ```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/myfontR.font.myfont

要在运行 Android 4.1(API 级别 16)及更高版本的设备上使用字体 XML 功能,请使用支持库 26.有关使用支持库的更多信息,请参阅 使用支持库部分。

要将字体添加为资源,请在 Android Studio 中执行以下步骤:

  1. 右键单击 res 文件夹,然后转到“ 新建”>“Android 资源目录”。将出现“ 新建资源目录”窗口。
  2. 在“资源类型”列表中,选择“ 字体”,然后单击“ 确定”。注意:资源目录的名称必须是 font

图1添加字体资源目录

  1. 在字体文件夹中添加字体文件。下面的文件夹结构生成 R.font.dancing_scriptR.font.lobsterR.font.typo_graphica

在资源目录中添加字体文件

  1. 双击字体文件以在编辑器中预览文件的字体。

预览字体文件

创建 font family

font family 是一组字体文件及其样式和重量详细信息。在 Android 中,您可以创建一个新的字体系列作为 XML 资源,并将其作为单个单元访问,而不是将每个样式和权重作为单独的资源引用。通过这样做,系统可以根据您尝试使用的文本样式选择正确的字体。

要创建字体系列,请在 Android Studio 中执行以下步骤:

  1. 右键单击该font文件夹,然后转到“ 新建”>“字体资源文件”。将出现“ 新建资源文件”窗口。

  2. 输入文件名,然后单击“ 确定”。新的字体资源 XML 在编辑器中打开。

  3. 将每个字体文件,样式和权重属性包含在<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 和资源标识符的实例。


文章作者: Weicools
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Weicools !
评论
 上一篇
Talk-With-Moe Talk-With-Moe
Talk With Me啦啦啦啦啦略略略略略啦啦啦啦啦略略略略略啦啦啦啦啦略略略略略啦啦啦啦啦略略略略略啦啦啦啦啦略略略略略,此处省略一万字……
2019-12-22 Weicools
下一篇 
比较合适的Hexo多设备同步方法 比较合适的Hexo多设备同步方法
比较合适的 Hexo 多设备同步方法经常我们有一个场景:需要在公司或者家庭多个电脑完成 Hexo 的博客撰写和发布工作。这就涉及到 Hexo 多电脑的同步问题。 网上的方案基本上都是多分支方案,也就是在同一个仓库创建两个分支: Hexo
2018-11-11 Weicools
  目录