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

ลองใช้วิธีแบบ 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 การใช้เครื่องมือสร้างเลย์เอาต์
    หน้าต่าง Resources จะปรากฏขึ้น
  2. เลือก Google Fonts ในเมนู Source
  3. เลือกแบบอักษรในช่อง Fonts ในส่วน "Downloadable"
  4. เลือก Create downloadable font แล้วคลิก OK
    รูปภาพแสดงวิธีเลือกแบบอักษรจากหน้าต่างทรัพยากร
    รูปที่ 3 การเลือกแบบอักษรจากหน้าต่าง Resources
  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

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

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

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

ดึงดูด

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

Kotlin

dependencies {
    ...
    implementation("androidx.core:core-ktx:1.18.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