Tự động định cỡ TextView | Android Developers

Với hệ điều hành Android 8.0 (API cấp 26) trở lên, bạn có thể ra lệnh cho
TextView tự động cho kích cỡ văn bản phình to ra hoặc thu nhỏ lại
để lấp đầy bố cục theo
đặc điểm và ranh giới của TextView. Chế độ cài đặt
này giúp việc tối ưu hoá kích cỡ văn bản trên nhiều màn hình bằng
nội dung động trở nên dễ dàng hơn.

Thư viện hỗ trợ 26.0 hỗ trợ đầy đủ tính năng
tự động định cỡ TextView trên các thiết bị chạy phiên bản Android
trước Android 8.0 (API cấp 26). Thư viện này hỗ trợ Android
4.0 (API cấp 14) trở lên. Gói android.support.v4.widget
chứa lớp TextViewCompat để truy cập các tính năng theo
kiểu tương thích ngược.

Thiết lập tính năng tự động định cỡ TextView

Bạn có thể sử dụng khung hoặc thư viện hỗ trợ để thiết lập tính năng tự động định cỡ
TextView bằng cách lập trình hoặc trong XML. Để
đặt thuộc tính XML, bạn cũng có thể sử dụng cửa sổ Thuộc tính
trong Android Studio.

Có ba cách thiết lập tính năng tự động định cỡ
TextView:

Lưu ý: Nếu đặt tính năng tự động định cỡ bằng tệp XML, thì
bạn không nên sử dụng giá trị “wrap_content” cho các thuộc tính
layout_width hoặc layout_height của
TextView. Điều này có thể mang lại kết quả không mong muốn.

Mặc định

Chế độ cài đặt mặc định cho phép tự động định cỡ TextView
một cách đồng nhất theo trục ngang và dọc.

  • Để xác định chế độ cài đặt mặc định bằng cách lập trình, hãy gọi
    phương thức setAutoSizeTextTypeWithDefaults(int autoSizeTextType)
    . Sử dụng AUTO_SIZE_TEXT_TYPE_NONE để tắt
    tính năng tự động định cỡ hoặc AUTO_SIZE_TEXT_TYPE_UNIFORM để
    điều chỉnh trục ngang và trục dọc theo tỷ lệ một cách đồng nhất.
  • Lưu ý: Các kích thước mặc định để
    điều chỉnh theo tỷ lệ đồng nhất là minTextSize = 12sp,
    maxTextSize = 112spgranularity = 1px.

  • Để xác định chế độ cài đặt mặc định trong XML, hãy sử dụng vùng chứa tên android
    và đặt thuộc tính autoSizeTextType thành none hoặc
    uniform.
<?xml version="1.0" encoding="utf-8"?>
<TextView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:autoSizeTextType="uniform" />

Sử dụng thư viện hỗ trợ

  • Để xác định chế độ cài đặt mặc định bằng cách lập trình thông qua thư viện hỗ trợ,
    hãy gọi
    phương thức
    TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType). Sử dụng một bản của tiện ích TextView
    và một trong các loại văn bản, ví dụ như
    TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE hoặc
    TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM.
  • Để xác định chế độ cài đặt mặc định trong XML thông qua thư viện hỗ trợ, hãy dùng
    vùng chứa tên app và đặt thuộc tính autoSizeTextType
    thành none hoặc uniform.
<?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>

Độ chi tiết

Bạn có thể xác định phạm vi kích cỡ văn bản tối thiểu và tối đa cũng như
kích thước chỉ định kích cỡ của từng bước. TextView
có chức năng điều chỉnh theo tỷ lệ một cách đồng nhất trong khoảng từ
thuộc tính kích thước tối thiểu đến tối đa. Mỗi mức độ gia tăng sẽ diễn ra theo kích cỡ bước
được đặt trong thuộc tính độ chi tiết.

  • Để xác định phạm vi của kích cỡ văn bản và kích thước bằng cách lập trình,
    hãy gọi
    phương thức
    setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit). Cung cấp giá trị tối đa, giá trị tối thiểu, giá trị độ chi tiết
    và bất kỳ đơn vị kích thước TypedValue nào.
  • Để xác định phạm vi kích cỡ văn bản và kích thước trong XML, hãy sử dụng vùng chứa tên android và đặt
    các thuộc tính sau:

    • Đặt thuộc tính
      autoSizeText
      thành none hoặc uniform. none
      là giá trị mặc định còn uniform cho phép
      TextView điều chỉnh theo tỷ lệ một cách đồng nhất trên trục ngang
      và trục dọc.
    • Đặt các thuộc tính autoSizeMinTextSize,
      autoSizeMaxTextSize
      autoSizeStepGranularity
      để xác định kích thước nhằm tự động định cỡ
      TextView.
<?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" />

Sử dụng thư viện hỗ trợ

  • Để xác định phạm vi của kích cỡ văn bản và kích thước bằng cách lập trình thông qua thư viện hỗ trợ,
    hãy gọi
    phương thức
    TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit). Cung cấp giá trị tối đa, giá trị tối thiểu, giá trị độ chi tiết
    và bất kỳ đơn vị kích thước TypedValue nào.
  • Để xác định phạm vi kích cỡ văn bản và kích thước trong XML thông qua thư viện
    hỗ trợ, hãy sử dụng vùng chứa tên app và đặt
    các thuộc tính autoSizeText, autoSizeMinTextSize,
    autoSizeMaxTextSize
    autoSizeStepGranularity trong tệp XML bố cục.
<?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>

Kích cỡ đặt sẵn

Kích cỡ đặt sẵn cho phép bạn chỉ định tất cả các giá trị mà
TextView sẽ chọn khi tự động định cỡ văn bản.

  • Để sử dụng kích cỡ đặt sẵn nhằm thiết lập tính năng tự động định cỡ
    TextView bằng cách lập trình, hãy gọi
    phương thức
    setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit). Cung cấp một loạt kích thước và bất kỳ
    đơn vị kích thước TypedValue nào cho kích cỡ đó.
  • Để sử dụng kích cỡ đặt sẵn nhằm thiết lập tính năng tự động định cỡ
    TextView trong XML, hãy sử dụng
    vùng chứa tên android và đặt các thuộc tính sau:

    • Đặt thuộc tính autoSizeText
      thành none hoặc uniform. none
      là giá trị mặc định còn uniform cho phép
      TextView điều chỉnh theo tỷ lệ một cách đồng nhất trên trục ngang
      và trục dọc.
    • Đặt thuộc tính
      autoSizePresetSizes
      thành một loạt các kích cỡ đặt sẵn. Để truy cập loạt đó dưới dạng
      tài nguyên, hãy xác định loạt đó trong
      tệp res/values/arrays.xml.
<resources>
  <array name="autosize_text_sizes">
    <item>10sp</item>
    <item>12sp</item>
    <item>20sp</item>
    <item>40sp</item>
    <item>100sp</item>
  </array>
</resources>
<?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" />

Sử dụng thư viện hỗ trợ

  • Để sử dụng kích cỡ đặt sẵn nhằm thiết lập tính năng tự động định cỡ
    TextView bằng cách lập trình thông qua thư viện hỗ trợ,
    hãy gọi
    phương thức
    TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit). Cung cấp một bản của lớp TextView, một loạt
    kích cỡ và bất kỳ đơn vị kích thước TypedValue nào cho
    kích cỡ đó.
  • Để sử dụng kích cỡ đặt sẵn nhằm thiết lập tính năng tự động định cỡ
    TextView trong XML thông qua thư viện hỗ trợ, hãy sử dụng
    vùng chứa tên app rồi đặt các thuộc tính autoSizeText
    autoSizePresetSizes trong tệp XML bố cục.
<resources>
  <array name="autosize_text_sizes">
    <item>10sp</item>
    <item>12sp</item>
    <item>20sp</item>
    <item>40sp</item>
    <item>100sp</item>
  </array>
</resources>
<?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>

Tài nguyên khác

Để biết thêm thông tin về tính năng tự động định cỡ TextView khi làm việc với nội dung
động, hãy tham khảo phần Tự động định cỡ TextView.