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

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

ฟีเจอร์แบบอักษรที่ดาวน์โหลดได้ช่วยให้ 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() เพื่อเรียกข้อมูลแบบอักษรจากผู้ให้บริการแบบอักษร วิธีการจะเริ่มตรวจสอบเพื่อดูว่าแบบอักษรอยู่ในแคชหรือไม่ หากไม่มีแบบอักษรในเครื่อง ระบบจะเรียกใช้ผู้ให้บริการแบบอักษร ดึงข้อมูลแบบอักษรแบบไม่สอดคล้อง และส่งผลลัพธ์ไปยังการเรียกกลับ ส่งพารามิเตอร์ต่อไปนี้
    • อินสแตนซ์ของคลาส 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 ซึ่งหมายความว่าคุณไม่จําเป็นต้องรวมแบบอักษรเป็นชิ้นงาน คุณสามารถกําหนดแบบอักษรที่กําหนดเองสําหรับทั้งธีม ซึ่งจะเพิ่มความสามารถในการใช้งานแบบอักษรที่มีน้ำหนักและรูปแบบหลายแบบ เช่น ตัวหนา ปานกลาง หรือเบา (หากมี)

  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"
    

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