สำหรับ 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เพื่อ ปรับสัดส่วนแกนแนวนอนและแกนแนวตั้งให้สม่ำเสมอกัน - หากต้องการกำหนดการตั้งค่าเริ่มต้นใน XML ให้ใช้เนมสเปซ
androidและตั้งค่าautoSizeTextTypeเป็น none หรือ แบบเดียวกัน
หมายเหตุ: ขนาดเริ่มต้นสำหรับแบบเดียวกัน
คือ minTextSize = 12sp
maxTextSize = 112sp และ granularity = 1px.
<?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ปรับสเกลเท่ากันในแนวนอนและ แกนแนวตั้ง - ตั้งค่า
autoSizeMinTextSizeautoSizeMaxTextSize, และ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และตั้งค่าautoSizeTextautoSizeMinTextSizeautoSizeMaxTextSizeและ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 ให้ใช้androidNamespace และตั้งค่าแอตทริบิวต์ต่อไปนี้- ตั้งค่า
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 โดยอัตโนมัติ