ฟีเจอร์แบบอักษรที่ดาวน์โหลดได้ช่วยให้ API ขอแบบอักษรจากแอปพลิเคชันของผู้ให้บริการแทนการรวมไฟล์ไว้ในแอปหรือให้แอปดาวน์โหลดแบบอักษร แบบอักษรที่ดาวน์โหลดได้พร้อมใช้งานในอุปกรณ์ที่ใช้ Android API เวอร์ชัน 14 ขึ้นไปผ่านไลบรารี AndroidX Core
แบบอักษรที่ดาวน์โหลดได้มีข้อดีดังต่อไปนี้
- ลดขนาดแอป จึงเพิ่มอัตราการติดตั้งแอปที่สำเร็จ
- ปรับปรุงประสิทธิภาพโดยรวมของระบบ เนื่องจากแอปหลายแอปสามารถใช้แบบอักษรเดียวกันผ่านผู้ให้บริการได้ ซึ่งจะช่วยประหยัดอินเทอร์เน็ตมือถือ หน่วยความจำโทรศัพท์ และพื้นที่ในดิสก์ของผู้ใช้ ในโมเดลนี้ ระบบจะดึงข้อมูลแบบอักษรผ่านเครือข่ายเมื่อจำเป็น
แบบอักษรที่ดาวน์โหลดได้ทำงานอย่างไร
ผู้ให้บริการแบบอักษรคือแอปพลิเคชันที่ดึงข้อมูลแบบอักษรและแคชไว้ในเครื่องเพื่อให้แอปอื่นๆ ขอและแชร์แบบอักษรได้ รูปภาพต่อไปนี้แสดงกระบวนการ
ข้อมูลเบื้องต้น
คุณสามารถใช้ฟีเจอร์แบบอักษรที่ดาวน์โหลดได้ดังต่อไปนี้ ซึ่งจะอธิบายอย่างละเอียดในส่วนถัดไป
ใช้แบบอักษรที่ดาวน์โหลดได้กับ Android Studio และบริการ Google Play
คุณตั้งค่าแอปพลิเคชันให้ดาวน์โหลดแบบอักษรได้โดยใช้ Android Studio 3.0 ขึ้นไป คุณสามารถใช้ผู้ให้บริการแบบอักษรจากบริการของ Google Play เพื่อช่วยในการเริ่มต้นใช้งานฟีเจอร์แบบอักษรที่ดาวน์โหลดได้
- ในเครื่องมือแก้ไขเลย์เอาต์ ให้เลือก
TextView
จากนั้นเลือก fontFamily > แบบอักษรเพิ่มเติม ในส่วนแอตทริบิวต์ หน้าต่างทรัพยากรจะปรากฏขึ้น - ในเมนูแหล่งที่มา ให้เลือก Google Fonts
- ในช่องแบบอักษร ให้เลือกแบบอักษรในส่วน "ดาวน์โหลดได้"
- เลือกสร้างแบบอักษรที่ดาวน์โหลดได้ แล้วคลิกตกลง
Android Studio จะสร้างไฟล์ XML ที่เกี่ยวข้องโดยอัตโนมัติซึ่งจําเป็นต่อการแสดงผลแบบอักษรในแอปอย่างถูกต้อง
ใช้แบบอักษรที่ดาวน์โหลดได้โดยใช้โปรแกรม
ตั้งแต่ Android 8.0 (API ระดับ 26) เป็นต้นไป AndroidX Core รองรับแบบอักษรที่ดาวน์โหลดได้อย่างเต็มที่ ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ไลบรารี AndroidX Core ได้ที่ส่วนไลบรารี AndroidX Core สำหรับแบบอักษรที่ดาวน์โหลดได้ในหน้านี้
หากต้องการใช้ฟีเจอร์แบบอักษรที่ดาวน์โหลดได้แบบเป็นโปรแกรม ให้โต้ตอบกับคลาสหลัก 2 คลาสต่อไปนี้
android.graphics.fonts.FontRequest
: คลาสนี้ช่วยให้คุณสร้างคำขอแบบอักษรได้FontsContractCompat
: คลาสนี้ช่วยให้คุณสร้างออบเจ็กต์Typeface
ใหม่ตามคำขอแบบอักษรได้
แอปของคุณจะดึงข้อมูลแบบอักษรจากผู้ให้บริการแบบอักษรโดยใช้ FontsContract
API ผู้ให้บริการแต่ละรายมีข้อจำกัดของตนเองเกี่ยวกับเวอร์ชัน Android และภาษาการค้นหาที่รองรับ ดูข้อมูลเพิ่มเติมเกี่ยวกับเวอร์ชัน Android และรูปแบบการค้นหาได้ในเอกสารประกอบของผู้ให้บริการ
หากต้องการดาวน์โหลดแบบอักษร ให้ทำตามขั้นตอนต่อไปนี้
- สร้างอินสแตนซ์ของคลาส
android.graphics.fonts.FontRequest
เพื่อขอแบบอักษรจากผู้ให้บริการ หากต้องการสร้างคําขอ ให้ส่งพารามิเตอร์ต่อไปนี้- หน่วยงานที่ดูแลผู้ให้บริการแบบอักษร
- แพ็กเกจผู้ให้บริการแบบอักษรเพื่อยืนยันตัวตนของผู้ให้บริการ
- สตริงการค้นหาแบบอักษร ดูข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบการค้นหาได้ในเอกสารประกอบของผู้ให้บริการแบบอักษร เช่น Google Fonts
- รายการชุดแฮชสําหรับใบรับรองเพื่อยืนยันตัวตนของผู้ให้บริการ
Kotlin
val request = FontRequest( "com.example.fontprovider.authority", "com.example.fontprovider", "my font", certs )
Java
FontRequest request = new FontRequest("com.example.fontprovider", "com.example.fontprovider", "my font", certs);
- สร้างอินสแตนซ์ของคลาส
FontsContract.FontRequestCallback
- ลบล้างวิธี
onTypefaceRetrieved()
เพื่อระบุว่าคำขอแบบอักษรเสร็จสมบูรณ์แล้ว ระบุแบบอักษรที่ดึงข้อมูลเป็นพารามิเตอร์ คุณใช้วิธีนี้เพื่อตั้งค่าแบบอักษรได้ตามต้องการ เช่น คุณตั้งค่าแบบอักษรในTextView
ได้ - ลบล้างวิธี
onTypefaceRequestFailed()
เพื่อรับข้อมูลเกี่ยวกับข้อผิดพลาดในกระบวนการขอแบบอักษร ดูข้อมูลเพิ่มเติมเกี่ยวกับรหัสข้อผิดพลาดได้ที่ค่าคงที่ของรหัสข้อผิดพลาด - เรียกใช้เมธอด
FontsContract.requestFont()
เพื่อเรียกข้อมูลแบบอักษรจากผู้ให้บริการแบบอักษร วิธีการจะเริ่มตรวจสอบเพื่อดูว่าแบบอักษรอยู่ในแคชหรือไม่ หากไม่มีแบบอักษรในเครื่อง ระบบจะเรียกผู้ให้บริการแบบอักษร เรียกข้อมูลแบบอักษรแบบไม่สอดคล้อง และส่งผลลัพธ์ไปยังการเรียกกลับ ส่งพารามิเตอร์ต่อไปนี้- อินสแตนซ์ของคลาส
Context
- อินสแตนซ์ของคลาส
android.graphics.fonts.FontRequest
- การติดต่อกลับเพื่อรับผลลัพธ์ของคำขอแบบอักษร
- แฮนเดิลสำหรับดึงข้อมูลแบบอักษรในชุดข้อความ
- อินสแตนซ์ของคลาส
โค้ดตัวอย่างต่อไปนี้แสดงกระบวนการโดยรวมของแบบอักษรที่ดาวน์โหลดได้
Kotlin
val request = FontRequest( "com.example.fontprovider.authority", "com.example.fontprovider", "my font", certs ) val callback = object : FontsContract.FontRequestCallback() { override fun onTypefaceRetrieved(typeface: Typeface) { // Your code to use the font goes here. ... } override fun onTypefaceRequestFailed(reason: Int) { // Your code to deal with the failure goes here. ... } } FontsContract.requestFonts(context, request, handler, null, callback)
Java
FontRequest request = new FontRequest("com.example.fontprovider.authority", "com.example.fontprovider", "my font", certs); FontsContract.FontRequestCallback callback = new FontsContract.FontRequestCallback() { @Override public void onTypefaceRetrieved(Typeface typeface) { // Your code to use the font goes here. ... } @Override public void onTypefaceRequestFailed(int reason) { // Your code to deal with the failure goes here. ... } }; FontsContract.requestFonts(context, request, handler, null, callback);
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีดาวน์โหลดแบบอักษรจากผู้ให้บริการแบบอักษรได้ที่แอปตัวอย่าง DownloadableFonts
ใช้แบบอักษรที่ดาวน์โหลดได้กับ AndroidX Core
AndroidX Core รองรับฟีเจอร์แบบอักษรที่ดาวน์โหลดได้ในอุปกรณ์ที่ใช้ Android
API เวอร์ชัน 14 ขึ้นไป แพ็กเกจ androidx.core.provider
ประกอบด้วยคลาส FontsContractCompat
และ FontRequest
เพื่อใช้การรองรับฟีเจอร์แบบดาวน์โหลดได้ที่เข้ากันได้แบบย้อนหลัง คลาส AndroidX มีเมธอดที่คล้ายกับเมธอดของเฟรมเวิร์ก และกระบวนการดาวน์โหลดแบบอักษรจะคล้ายกับที่อธิบายไว้ในส่วนการใช้แบบอักษรที่ดาวน์โหลดได้แบบเป็นโปรแกรมในหน้านี้
หากต้องการดาวน์โหลดแบบอักษรโดยใช้ AndroidX ให้นําเข้าคลาส FontsContractCompat
และ FontRequest
จากแพ็กเกจ androidx.core.provider
สร้างอินสแตนซ์ของคลาสเหล่านี้แทนคลาสเฟรมเวิร์ก FontsContract
และ android.graphics.fonts.FontRequest
เพิ่มการพึ่งพา AndroidX Core
หากต้องการใช้คลาส FontsContractCompat
และ FontRequest
คุณต้องแก้ไขการพึ่งพา classpath ของโปรเจ็กต์แอปภายในสภาพแวดล้อมการพัฒนา
หากต้องการเพิ่ม AndroidX Core ลงในโปรเจ็กต์แอปพลิเคชัน ให้เพิ่มการพึ่งพาต่อไปนี้ลงในไฟล์ build.gradle
ของแอป
Groovy
dependencies { ... implementation "androidx.core:core-ktx:2.2.0" }
Kotlin
dependencies { ... implementation("androidx.core:core-ktx:2.2.0") }
ใช้แบบอักษรที่ดาวน์โหลดได้เป็นทรัพยากรใน XML
Android 8.0 (API ระดับ 26) และ AndroidX Core มีวิธีที่สะดวกและรวดเร็วกว่าในการประกาศแบบอักษรที่กำหนดเองเป็นทรัพยากรในเลย์เอาต์ XML ซึ่งหมายความว่าคุณไม่จําเป็นต้องรวมแบบอักษรเป็นชิ้นงาน คุณสามารถกําหนดแบบอักษรที่กําหนดเองสําหรับทั้งธีม ซึ่งจะเพิ่มความสามารถในการใช้งานแบบอักษรที่มีน้ำหนักและรูปแบบหลายแบบ เช่น ตัวหนา ปานกลาง หรือเบา (หากมี)
- สร้างไฟล์ XML ใหม่ในโฟลเดอร์
res/font
- เพิ่มองค์ประกอบรูท
<font-family>
และตั้งค่าแอตทริบิวต์ที่เกี่ยวข้องกับแบบอักษร ดังที่แสดงในตัวอย่างไฟล์ XML ต่อไปนี้ - อ้างอิงไฟล์เป็น
@font/font_file_name
ในไฟล์ XML ของเลย์เอาต์ นอกจากนี้ คุณยังใช้วิธีgetFont()
เพื่อเรียกข้อมูลไฟล์ผ่านการใช้โปรแกรมได้ด้วย เช่นgetFont(R.font.font_file_name)
<?xml version="1.0" encoding="utf-8"?> <font-family xmlns:android="http://schemas.android.com/apk/res/android" android:fontProviderAuthority="com.example.fontprovider.authority" android:fontProviderPackage="com.example.fontprovider" android:fontProviderQuery="example font" android:fontProviderCerts="@array/certs"> </font-family>
ประกาศแบบอักษรล่วงหน้าในไฟล์ Manifest
การจัดวางและการรับทรัพยากรเป็นงานที่ทำงานพร้อมกัน โดยค่าเริ่มต้น การพยายามดึงข้อมูลแบบอักษรครั้งแรกจะทริกเกอร์คำขอไปยังผู้ให้บริการแบบอักษร ซึ่งจะทำให้เวลาในการสร้างเลย์เอาต์ครั้งแรกเพิ่มขึ้น หากต้องการหลีกเลี่ยงความล่าช้า คุณสามารถประกาศแบบอักษรที่ต้องเรียกข้อมูลในไฟล์ Manifest ล่วงหน้า หลังจากระบบดึงข้อมูลแบบอักษรจากผู้ให้บริการแล้ว แบบอักษรจะพร้อมใช้งานทันที หากการเรียกข้อมูลแบบอักษรใช้เวลานานกว่าที่คาดไว้ ระบบจะยกเลิกกระบวนการดึงข้อมูลและใช้แบบอักษรเริ่มต้น
หากต้องการประกาศแบบอักษรในไฟล์ Manifest ล่วงหน้า ให้ทำตามขั้นตอนต่อไปนี้
- สร้างอาร์เรย์ทรัพยากรใน
res/values/arrays.xml
และประกาศแบบอักษรที่ต้องการโหลดล่วงหน้า - ใช้แท็ก
meta-data
เพื่อประกาศอาร์เรย์ทรัพยากรในไฟล์ Manifest
res/values/arrays.xml <?xml version="1.0" encoding="utf-8"?> <resources> <array name="preloaded_fonts"> <item>@font/font1</item> <item>@font/font2</item> </array> </resources>
<meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
เพิ่มใบรับรอง
เมื่อไม่ได้ติดตั้งผู้ให้บริการแบบอักษรไว้ล่วงหน้า หรือหากคุณใช้ไลบรารี AndroidX Core ให้ประกาศใบรับรองที่ผู้ให้บริการแบบอักษรใช้ลงนาม ระบบจะใช้ใบรับรองเพื่อยืนยันตัวตนของผู้ให้บริการแบบอักษร
ทําตามขั้นตอนต่อไปนี้เพื่อเพิ่มใบรับรอง
- สร้างอาร์เรย์สตริงที่มีรายละเอียดใบรับรอง ดูข้อมูลเพิ่มเติมเกี่ยวกับรายละเอียดใบรับรองได้ในเอกสารประกอบของผู้ให้บริการแบบอักษร
- ตั้งค่าแอตทริบิวต์
fontProviderCerts
เป็นอาร์เรย์
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array> </resources>
android:fontProviderCerts="@array/certs"