ใช้แบบอักษรที่ดาวน์โหลดได้

ลองใช้วิธีแบบ Compose
Jetpack Compose เป็นชุดเครื่องมือ UI ที่แนะนำสำหรับ Android ดูวิธีใช้ข้อความใน Compose

ฟีเจอร์แบบอักษรที่ดาวน์โหลดได้ช่วยให้ API ขอแบบอักษรจากแอปพลิเคชันของผู้ให้บริการได้แทนที่จะรวมไฟล์ไว้ในแอปหรือให้แอปดาวน์โหลดแบบอักษร แบบอักษรที่ดาวน์โหลดได้พร้อมใช้งานในอุปกรณ์ที่ใช้ Android API เวอร์ชัน 14 ขึ้นไปผ่านไลบรารี AndroidX Core

แบบอักษรที่ดาวน์โหลดได้มีประโยชน์ดังต่อไปนี้

  • ลดขนาดแอป ซึ่งจะช่วยเพิ่มอัตราความสำเร็จในการติดตั้งแอป
  • ปรับปรุงประสิทธิภาพโดยรวมของระบบ เนื่องจากแอปหลายแอปสามารถแชร์แบบอักษรเดียวกันผ่านผู้ให้บริการได้ ซึ่งจะช่วยประหยัดอินเทอร์เน็ตมือถือ หน่วยความจำโทรศัพท์ และพื้นที่ในดิสก์ของผู้ใช้ ในโมเดลนี้ ระบบจะดึงข้อมูลแบบอักษรผ่านเครือข่ายเมื่อจำเป็น
หากต้องการสัมผัสประสบการณ์การใช้งานแบบอักษรที่ดาวน์โหลดได้โดยตรง โปรดดูแอปตัวอย่าง DownloadableFonts

แบบอักษรที่ดาวน์โหลดได้ทำงานอย่างไร

ผู้ให้บริการแบบอักษรคือแอปพลิเคชันที่ดึงข้อมูลแบบอักษรและแคชไว้ในเครื่องเพื่อให้แอปอื่นๆ สามารถขอและแชร์แบบอักษรได้ รูปภาพต่อไปนี้แสดงกระบวนการดังกล่าว

รูปภาพที่แสดงองค์ประกอบหลักในกระบวนการความเข้ากันได้ของอีโมจิ
รูปที่ 1 กระบวนการแบบอักษรที่ดาวน์โหลดได้

ข้อมูลเบื้องต้น

คุณสามารถใช้ฟีเจอร์แบบอักษรที่ดาวน์โหลดได้ด้วยวิธีต่อไปนี้ ซึ่งจะอธิบายโดยละเอียดในส่วนถัดไป

ใช้แบบอักษรที่ดาวน์โหลดได้กับ Android Studio และบริการ Google Play

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

  1. ในเครื่องมือแก้ไขเลย์เอาต์ ให้เลือก TextView จากนั้นในส่วนแอตทริบิวต์ ให้เลือก fontFamily > แบบอักษรเพิ่มเติม
    รูปภาพแสดงเครื่องมือแก้ไขเลย์เอาต์ของ Android Studio
    รูปที่ 2 การใช้เครื่องมือแก้ไขเลย์เอาต์
    หน้าต่างทรัพยากรจะปรากฏขึ้น
  2. ในเมนูแหล่งที่มา ให้เลือก Google Fonts
  3. ในช่องแบบอักษร ให้เลือกแบบอักษรในส่วน "ดาวน์โหลดได้"
  4. เลือกสร้างแบบอักษรที่ดาวน์โหลดได้ แล้วคลิกตกลง
    รูปภาพแสดงวิธีเลือกแบบอักษรจากหน้าต่างแหล่งข้อมูล
    รูปที่ 3 การเลือกแบบอักษรจากหน้าต่างแหล่งข้อมูล
  5. Android Studio จะสร้างไฟล์ XML ที่เกี่ยวข้องซึ่งจำเป็นต่อการแสดงผลแบบอักษรในแอปอย่างถูกต้องโดยอัตโนมัติ

    รูปภาพแสดงวิธีดูตัวอย่างแบบอักษร
    รูปที่ 4 กำลังแสดงตัวอย่างไฟล์แบบอักษร

ใช้แบบอักษรที่ดาวน์โหลดได้โดยใช้โปรแกรม

ตั้งแต่ Android 8.0 (ระดับ API 26) เป็นต้นไป AndroidX Core จะรองรับแบบอักษรที่ดาวน์โหลดได้เต็มรูปแบบ ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ไลบรารี AndroidX Core ได้ที่ส่วนไลบรารี AndroidX Core ของแบบอักษรที่ดาวน์โหลดได้ในหน้านี้

หากต้องการใช้ฟีเจอร์แบบอักษรที่ดาวน์โหลดได้แบบเป็นโปรแกรม ให้โต้ตอบกับคลาสหลัก 2 คลาส ได้แก่

  • android.graphics.fonts.FontRequest: คลาสนี้ช่วยให้คุณสร้างคำขอแบบอักษรได้
  • FontsContractCompat: คลาสนี้ช่วยให้คุณสร้างออบเจ็กต์ Typeface ใหม่ตามคำขอแบบอักษรได้

แอปของคุณจะดึงข้อมูลแบบอักษรจากผู้ให้บริการแบบอักษรโดยใช้ FontsContract API ผู้ให้บริการแต่ละรายมีชุดข้อจำกัดของตนเองเกี่ยวกับเวอร์ชัน Android และภาษาการค้นหาที่รองรับ ดูข้อมูลเพิ่มเติมเกี่ยวกับเวอร์ชัน Android และรูปแบบการค้นหาได้ในเอกสารประกอบของผู้ให้บริการ

หากต้องการดาวน์โหลดแบบอักษร ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้างอินสแตนซ์ของคลาส 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);
  2. สร้างอินสแตนซ์ของคลาส FontsContract.FontRequestCallback
  3. ลบล้างเมธอด onTypefaceRetrieved() เพื่อระบุว่าคำขอแบบอักษรเสร็จสมบูรณ์แล้ว ระบุแบบอักษรที่ดึงมาเป็นพารามิเตอร์ คุณใช้วิธีนี้เพื่อตั้งค่าแบบอักษรได้ตามต้องการ เช่น คุณสามารถตั้งค่าแบบอักษรใน TextView ได้
  4. ลบล้างเมธอด onTypefaceRequestFailed() เพื่อรับข้อมูลเกี่ยวกับข้อผิดพลาดในกระบวนการส่งคำขอแบบอักษร ดูข้อมูลเพิ่มเติมเกี่ยวกับรหัสข้อผิดพลาดได้ที่ค่าคงที่ของรหัสข้อผิดพลาด
  5. เรียกใช้เมธอด FontsContract.requestFont() เพื่อดึงข้อมูลแบบอักษรจากผู้ให้บริการแบบอักษร เมธอดจะเริ่มการตรวจสอบเพื่อดูว่ามีแบบอักษรอยู่ในแคชหรือไม่ หากแบบอักษรไม่พร้อมใช้งานในเครื่อง ระบบจะเรียกใช้ผู้ให้บริการแบบอักษร ดึงข้อมูลแบบอักษรแบบอะซิงโครนัส และส่งผลลัพธ์ไปยัง Callback ส่งพารามิเตอร์ต่อไปนี้
    • อินสแตนซ์ของคลาส Context
    • อินสแตนซ์ของคลาส android.graphics.fonts.FontRequest
    • Callback เพื่อรับผลลัพธ์ของคำขอแบบอักษร
    • ตัวแฮนเดิลเพื่อดึงข้อมูลแบบอักษรในชุดข้อความ

โค้ดตัวอย่างต่อไปนี้แสดงกระบวนการโดยรวมของแบบอักษรที่ดาวน์โหลดได้

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

เพิ่มทรัพยากร Dependency ของ AndroidX Core

หากต้องการใช้คลาส FontsContractCompat และ FontRequest คุณต้องแก้ไขทรัพยากร Dependency ของคลาสพาธของโปรเจ็กต์แอปภายในสภาพแวดล้อมในการพัฒนาซอฟต์แวร์

หากต้องการเพิ่ม AndroidX Core ลงในโปรเจ็กต์แอปพลิเคชัน ให้เพิ่มทรัพยากร Dependency ต่อไปนี้ลงในไฟล์ build.gradle ของแอป

ดึงดูด

dependencies {
    ...
    implementation "androidx.core:core-ktx:1.19.1"
}

Kotlin

dependencies {
    ...
    implementation("androidx.core:core-ktx:1.19.1")
}

ใช้แบบอักษรที่ดาวน์โหลดได้เป็นทรัพยากรใน XML

Android 8.0 (ระดับ API 26) และ AndroidX Core มีวิธีที่รวดเร็วและสะดวกยิ่งขึ้นในการประกาศแบบอักษรที่กำหนดเองเป็นทรัพยากรในเลย์เอาต์ XML ซึ่งหมายความว่าคุณไม่จำเป็นต้องรวมแบบอักษรเป็นชิ้นงาน คุณสามารถกำหนดแบบอักษรที่กำหนดเองสำหรับทั้งธีม ซึ่งจะช่วยเร่งความสามารถในการใช้งานสำหรับน้ำหนักและสไตล์ที่หลากหลาย เช่น ตัวหนา ตัวกลาง หรือตัวบาง เมื่อมีให้ใช้งาน

  1. สร้างไฟล์ XML ใหม่ในโฟลเดอร์ res/font
  2. เพิ่มองค์ประกอบรูท <font-family> และตั้งค่าแอตทริบิวต์ที่เกี่ยวข้องกับแบบอักษร ดังที่แสดงในไฟล์ XML ตัวอย่างต่อไปนี้
  3. <?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>
  4. อ้างอิงไฟล์เป็น @font/font_file_name ในไฟล์ XML ของเลย์เอาต์ นอกจากนี้ คุณยังใช้เมธอด getFont() เพื่อดึงข้อมูลไฟล์แบบเป็นโปรแกรมได้ด้วย เช่น getFont(R.font.font_file_name)

ประกาศแบบอักษรล่วงหน้าในไฟล์ Manifest

การสร้างเลย์เอาต์และการดึงข้อมูลทรัพยากรเป็นงานที่ทำพร้อมกัน โดยค่าเริ่มต้น การพยายามดึงข้อมูลแบบอักษรครั้งแรกจะทริกเกอร์คำขอไปยังผู้ให้บริการแบบอักษร จึงทำให้เวลาในการจัดเลย์เอาต์ครั้งแรกเพิ่มขึ้น คุณสามารถประกาศแบบอักษรที่ต้องดึงข้อมูลในไฟล์ Manifest ล่วงหน้าเพื่อหลีกเลี่ยงความล่าช้าได้ หลังจากระบบดึงข้อมูลแบบอักษรจากผู้ให้บริการแล้ว แบบอักษรดังกล่าวจะพร้อมใช้งานทันที หากการดึงข้อมูลแบบอักษรใช้เวลานานกว่าที่คาดไว้ ระบบจะยกเลิกกระบวนการดึงข้อมูลและใช้แบบอักษรเริ่มต้น

หากต้องการประกาศแบบอักษรล่วงหน้าในไฟล์ Manifest ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้างอาร์เรย์ทรัพยากรใน res/values/arrays.xml และประกาศแบบอักษรที่ต้องการดึงข้อมูลล่วงหน้า
  2. 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>
  3. ใช้แท็ก meta-data เพื่อประกาศอาร์เรย์ทรัพยากรในไฟล์ Manifest
  4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />

เพิ่มใบรับรอง

เมื่อไม่ได้ติดตั้งผู้ให้บริการแบบอักษรไว้ล่วงหน้า หรือหากคุณใช้ไลบรารี AndroidX Core ให้ประกาศใบรับรองที่ผู้ให้บริการแบบอักษรลงนามไว้ ระบบจะใช้ใบรับรองเพื่อยืนยันตัวตนของผู้ให้บริการแบบอักษร

ทำตามขั้นตอนต่อไปนี้เพื่อเพิ่มใบรับรอง

  1. สร้างอาร์เรย์สตริงที่มีรายละเอียดใบรับรอง ดูข้อมูลเพิ่มเติมเกี่ยวกับรายละเอียดใบรับรองได้ในเอกสารประกอบของผู้ให้บริการแบบอักษร
  2. <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="certs">
           <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item>
        </string-array>
    </resources>
  3. ตั้งค่าแอตทริบิวต์ fontProviderCerts เป็นอาร์เรย์
  4. android:fontProviderCerts="@array/certs"