Tự động định kích thước TextView

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

Thư viện hỗ trợ 26.0 hỗ trợ đầy đủ tính năng TextView tự động định cỡ trên các thiết bị chạy Android phiên bản 8.0 (API cấp 26) trở xuống. Gói android.support.v4.widget chứa lớp TextViewCompat để truy cập các tính năng theo cách 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ó 3 cách thiết lập tính năng tự động định cỡ TextView, như mô tả trong các phần sau:

Lưu ý: Nếu đặt tính năng tự động định cỡ trong tệp XML, 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. Việc 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 theo tỷ lệ một cách đồng nhất trên 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 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 không gian 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" />
    

Xác định cài đặt mặc định bằng cách sử dụng Thư viện hỗ trợ

  • Để xác định chế độ cài đặt mặc định theo phương thức 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). Cung cấp một bản sao của tiện ích TextView và một trong các loại văn bản, chẳng hạn 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 sử dụng không gian 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ẽ xảy ra dưới dạng kích thướ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 không gian tên android và đặt các thuộc tính sau:
    • Đặt thuộc tính autoSizeTextType thành none hoặc uniform. Giá trị none là giá trị mặc định và giá trị uniform cho phép TextView điều chỉnh theo tỷ lệ đồng nhất trên trục ngang và dọc.
    • Đặt các thuộc tính autoSizeMinTextSize, autoSizeMaxTextSizeautoSizeStepGranularity để 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" />
    

Xác định độ chi tiết bằng Thư viện hỗ trợ

  • Để xác định phạm vi kích thướ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à một kích thước trong XML thông qua Thư viện hỗ trợ, hãy sử dụng không gian tên app và đặt các thuộc tính autoSizeText, autoSizeMinTextSize, autoSizeMaxTextSizeautoSizeStepGranularity 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 thước đặt trước

Kích thước giá trị đặt trước cho phép bạn chỉ định các giá trị mà TextView 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 autoSizeTextType thành none hoặc uniform. Giá trị none là giá trị mặc định và giá trị uniform cho phép TextView điều chỉnh theo tỷ lệ đồng nhất trên trục ngang và 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" />
    

Thiết lập kích thước đặt trước bằng Thư viện hỗ trợ

  • Để sử dụng kích cỡ đặt trước nhằm thiết lập tính năng tự động định cỡ TextView theo phương thức 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 sao của lớp TextView, một mảng kích thước và bất kỳ đơn vị kích thước TypedValue nào cho kích thước đó.
  • Để sử dụng kích cỡ đặt trước 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 không gian tên app, đồng thời đặt các thuộc tính autoSizeTextTypeautoSizePresetSizes 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 xem nội dung Android Jetpack: Tự động định cỡ TextView.