ปรับขนาด TextView อัตโนมัติ

สำหรับ Android 8.0 (API ระดับ 26) ขึ้นไป คุณสามารถแนะนำ TextView เพื่อให้ข้อความแสดงขนาดได้ ขยายหรือย่อโดยอัตโนมัติเพื่อเติมการจัดวางตาม ลักษณะและขอบเขตของ TextView การตั้งค่านี้ช่วยให้คุณ ปรับขนาดข้อความให้เหมาะสมในหน้าจอต่างๆ ด้วยเนื้อหาแบบไดนามิก

Support Library 26.0 รองรับการปรับขนาด TextView อัตโนมัติอย่างเต็มรูปแบบ ในอุปกรณ์ที่ใช้ Android เวอร์ชัน 8.0 (API ระดับ 26) หรือต่ำกว่า แพ็กเกจ android.support.v4.widget มี TextViewCompat ในการเข้าถึงคุณลักษณะในรูปแบบที่เข้ากันได้แบบย้อนหลัง

ตั้งค่าขนาดอัตโนมัติของ TextView

คุณสามารถใช้เฟรมเวิร์กหรือไลบรารีการสนับสนุนเพื่อตั้งค่าการปรับขนาดอัตโนมัติ TextView แบบเป็นโปรแกรมหรือใน XML ถึง ตั้งค่าแอตทริบิวต์ XML คุณยังสามารถใช้คุณสมบัติ ใน Android Studio

คุณตั้งค่าการปรับขนาด TextView อัตโนมัติได้ 3 วิธี ซึ่งอธิบายไว้ในส่วนต่อๆ ไป

หมายเหตุ: หากคุณตั้งค่าการปรับขนาดอัตโนมัติในไฟล์ XML เราจะไม่ดำเนินการต่อไปนี้ ขอแนะนำให้ใช้ค่า "wrap_content" สำหรับ แอตทริบิวต์ layout_width หรือ layout_height ของแอตทริบิวต์ TextView การดำเนินการนี้อาจ ผลลัพธ์ที่ไม่คาดคิด

ค่าเริ่มต้น

การตั้งค่าเริ่มต้นจะทำให้การปรับขนาด TextView เป็นแบบอัตโนมัติ เหมือนกันบนแกนแนวนอนและแกนแนวตั้ง

  • หากต้องการกำหนดการตั้งค่าเริ่มต้นแบบเป็นโปรแกรม ให้เรียกเมธอด setAutoSizeTextTypeWithDefaults(int autoSizeTextType) ระบุ AUTO_SIZE_TEXT_TYPE_NONE เพื่อปิด ฟีเจอร์การปรับขนาดอัตโนมัติหรือAUTO_SIZE_TEXT_TYPE_UNIFORMเพื่อ ปรับสัดส่วนแกนแนวนอนและแกนแนวตั้งให้สม่ำเสมอกัน
  • หมายเหตุ: ขนาดเริ่มต้นสำหรับแบบเดียวกัน คือ minTextSize = 12sp maxTextSize = 112sp และ granularity = 1px.

  • หากต้องการกำหนดการตั้งค่าเริ่มต้นใน XML ให้ใช้เนมสเปซ android และตั้งค่า autoSizeTextType เป็น none หรือ แบบเดียวกัน
  • <?xml version="1.0" encoding="utf-8"?>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:autoSizeTextType="uniform" />
    

กำหนดการตั้งค่าเริ่มต้นโดยใช้ Support Library

  • หากต้องการกำหนดการตั้งค่าเริ่มต้นแบบเป็นโปรแกรมผ่านไลบรารีการสนับสนุน โทรหา TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType) ระบุอินสแตนซ์ของวิดเจ็ต TextView และข้อความ 1 ประเภท เช่น TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE หรือ TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
  • หากต้องการกำหนดการตั้งค่าเริ่มต้นใน XML ผ่านไลบรารีการสนับสนุน ให้ใช้เมธอด เนมสเปซ app และกำหนด autoSizeTextType เป็น none หรือ 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>
    

รายละเอียด

คุณสามารถกำหนดช่วงของขนาดข้อความต่ำสุดและสูงสุด ซึ่งระบุขนาดของแต่ละขั้นตอน TextView จะมีสเกลเท่ากันในช่วงระหว่าง ขนาดต่ำสุดและสูงสุด การเพิ่มแต่ละครั้งที่เกิดขึ้นเป็นขั้นตอน การตั้งค่าขนาดในแอตทริบิวต์รายละเอียด

  • หากต้องการกำหนดช่วงของขนาดข้อความและมิติข้อมูลแบบเป็นโปรแกรม ให้เรียกใช้ เวลา setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) ระบุค่าสูงสุด ค่าต่ำสุด และรายละเอียด และ TypedValue ใดก็ได้ มิติข้อมูล
  • หากต้องการกำหนดช่วงของขนาดข้อความและมิติข้อมูลใน XML ให้ใช้ android เนมสเปซและกำหนด แอตทริบิวต์ต่อไปนี้
    • ตั้งค่า autoSizeTextType เป็น none หรือ uniform ค่า none คือค่าเริ่มต้น และแบบเดียวกันจะ TextView ปรับสเกลเท่ากันในแนวนอนและ แกนแนวตั้ง
    • ตั้งค่าautoSizeMinTextSize autoSizeMaxTextSize, และ autoSizeStepGranularity เพื่อกำหนดขนาดสำหรับการปรับขนาดอัตโนมัติ 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" />
    

กำหนดรายละเอียดโดยใช้ไลบรารีการสนับสนุน

  • หากต้องการกำหนดช่วงของขนาดข้อความและมิติข้อมูลแบบเป็นโปรแกรมผ่าน ไลบรารีการสนับสนุน เรียก TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) ระบุค่าสูงสุด ค่าต่ำสุด ค่ารายละเอียด และหน่วยมิติข้อมูลTypedValueใดก็ได้
  • ในการกำหนดช่วงของขนาดข้อความและมิติข้อมูลใน XML ผ่านทางการสนับสนุน ไลบรารี ให้ใช้เนมสเปซ app และตั้งค่า autoSizeText autoSizeMinTextSize autoSizeMaxTextSize และ autoSizeStepGranularity ในไฟล์ 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 Namespace และตั้งค่าแอตทริบิวต์ต่อไปนี้
    • ตั้งค่าautoSizeTextType เป็น none หรือ uniform คำสั่ง none เป็นค่าเริ่มต้น และแบบเดียวกันจะ TextView ปรับสเกลเท่ากันในแนวนอนและ แกนแนวตั้ง
    • ตั้งค่า autoSizePresetSizes เป็นอาร์เรย์ของขนาดที่กำหนดล่วงหน้า ในการเข้าถึงอาร์เรย์เป็น ให้กำหนดอาร์เรย์ใน 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" />
    

ตั้งค่าขนาดที่กำหนดล่วงหน้าโดยใช้ไลบรารีการสนับสนุน

  • เพื่อใช้ขนาดที่กำหนดไว้ล่วงหน้าเพื่อตั้งค่าการปรับขนาดอัตโนมัติ TextView แบบเป็นโปรแกรม ผ่านทางไลบรารีการสนับสนุน ให้เรียก TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit) โปรดระบุอินสแตนซ์ของคลาส TextView ซึ่งเป็น อาร์เรย์ของขนาด และหน่วยมิติข้อมูล TypedValue สำหรับ ขนาด
  • เพื่อใช้ขนาดที่กำหนดไว้ล่วงหน้าเพื่อตั้งค่าการปรับขนาดอัตโนมัติ TextView ใน XML ผ่านไลบรารีการสนับสนุน ให้ใช้ เนมสเปซ app และกำหนด autoSizeTextType และ autoSizePresetSizes ในไฟล์ 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"?>
    <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>
    

แหล่งข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับการปรับขนาด TextView อัตโนมัติเมื่อทำงานกับไดนามิก เนื้อหา ดู Android Jetpack: การปรับขนาด TextView โดยอัตโนมัติ