डाउनलोड किए जा सकने वाले फ़ॉन्ट इस्तेमाल करें

Compose को आज़माएं
Jetpack Compose, Android के लिए यूज़र इंटरफ़ेस (यूआई) का सुझाया गया टूलकिट है. Compose में टेक्स्ट का इस्तेमाल करने का तरीका जानें.

डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा की मदद से, एपीआई, फ़ॉन्ट के लिए सेवा देने वाले ऐप्लिकेशन से अनुरोध कर सकते हैं. इसके लिए, ऐप्लिकेशन में फ़ाइलें बंडल करने या ऐप्लिकेशन को फ़ॉन्ट डाउनलोड करने की अनुमति देने की ज़रूरत नहीं होती. AndroidX Core लाइब्रेरी की मदद से, डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा, Android API के वर्शन 14 और इसके बाद के वर्शन वाले डिवाइसों पर उपलब्ध है.

डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा से ये फ़ायदे मिलते हैं:

  • इससे ऐप्लिकेशन का साइज़ कम होता है. इसलिए, ऐप्लिकेशन के इंस्टॉल होने की दर बढ़ जाती है.
  • इससे सिस्टम की परफ़ॉर्मेंस बेहतर होती है, क्योंकि एक से ज़्यादा ऐप्लिकेशन, सेवा देने वाली कंपनी के ज़रिए एक ही फ़ॉन्ट शेयर कर सकते हैं. इससे उपयोगकर्ताओं का मोबाइल डेटा, फ़ोन की मेमोरी, और डिस्क स्पेस बचता है. इस मॉडल में, ज़रूरत पड़ने पर नेटवर्क से फ़ॉन्ट फ़ेच किया जाता है.
डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा के बारे में ज़्यादा जानने के लिए, डाउनलोड किए जा सकने वाले फ़ॉन्ट का सैंपल ऐप्लिकेशन देखें.

डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा कैसे काम करती है?

फ़ॉन्ट की सेवा देने वाला ऐप्लिकेशन, फ़ॉन्ट को वापस पाने और उन्हें स्थानीय तौर पर कैश करने वाला ऐप्लिकेशन होता है. इससे दूसरे ऐप्लिकेशन, फ़ॉन्ट के लिए अनुरोध कर सकते हैं और उन्हें शेयर कर सकते हैं. नीचे दी गई इमेज में, इस प्रोसेस के बारे में बताया गया है.

इमोजी कंपैटिबिलिटी की प्रोसेस में शामिल मुख्य कॉम्पोनेंट दिखाने वाली इमेज
इमेज 1. डाउनलोड किए जा सकने वाले फ़ॉन्ट की प्रोसेस.

बुनियादी बातें

डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा का इस्तेमाल इन तरीकों से किया जा सकता है. इनके बारे में, बाद के सेक्शन में ज़्यादा जानकारी दी गई है:

Android Studio और Google Play services के साथ, डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा का इस्तेमाल करना

Android Studio 3.0 या इसके बाद के वर्शन का इस्तेमाल करके, अपने ऐप्लिकेशन को फ़ॉन्ट डाउनलोड करने के लिए सेट किया जा सकता है. डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा का इस्तेमाल शुरू करने के लिए, Google Play services से फ़ॉन्ट की सेवा देने वाली कंपनी का इस्तेमाल किया जा सकता है.

  1. लेआउट एडिटर में, कोई TextView चुनें. इसके बाद, एट्रिब्यूट में जाकर, fontFamily > ज़्यादा फ़ॉन्ट चुनें.
    Android Studio के लेआउट एडिटर को दिखाने वाली इमेज
    इमेज 2. लेआउट एडिटर का इस्तेमाल करना.
    संसाधन विंडो दिखती है.
  2. सोर्स मेन्यू में, Google Fonts चुनें.
  3. फ़ॉन्ट बॉक्स में, "डाउनलोड किए जा सकने वाले" सेक्शन में जाकर कोई फ़ॉन्ट चुनें.
  4. डाउनलोड किए जा सकने वाला फ़ॉन्ट बनाएं को चुनें. इसके बाद, ठीक है पर क्लिक करें.
    इस इमेज में, रिसोर्स विंडो से फ़ॉन्ट चुनने का तरीका दिखाया गया है
    इमेज 3. संसाधन विंडो से कोई फ़ॉन्ट चुनना.
  5. Android Studio, आपके ऐप्लिकेशन में फ़ॉन्ट को सही तरीके से रेंडर करने के लिए ज़रूरी एक्सएमएल फ़ाइलें अपने-आप जनरेट करता है.

    फ़ॉन्ट की झलक देखने का तरीका दिखाने वाली इमेज
    इमेज 4. फ़ॉन्ट फ़ाइल की झलक देखना.

प्रोग्राम के ज़रिए, डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा का इस्तेमाल करना

Android 8.0 (एपीआई लेवल 26) से, AndroidX Core, डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा के लिए पूरी सहायता उपलब्ध कराता है. AndroidX Core लाइब्रेरी का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, इस पेज पर AndroidX Core लाइब्रेरी के लिए, डाउनलोड किए जा सकने वाले फ़ॉन्ट का सेक्शन देखें.

प्रोग्राम के ज़रिए, डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा का इस्तेमाल करने के लिए, इन दो मुख्य क्लास के साथ इंटरैक्ट करें:

  • android.graphics.fonts.FontRequest: इस क्लास की मदद से, फ़ॉन्ट के लिए अनुरोध किया जा सकता है.
  • FontsContractCompat: इस क्लास की मदद से, फ़ॉन्ट के अनुरोध के आधार पर नया Typeface ऑब्जेक्ट बनाया जा सकता है.

आपका ऐप्लिकेशन, FontsContract एपीआई का इस्तेमाल करके, फ़ॉन्ट की सेवा देने वाली कंपनी से फ़ॉन्ट वापस पाता है. हर सेवा देने वाली कंपनी के लिए, 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. Create an instance of the 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);

फ़ॉन्ट की सेवा देने वाली कंपनी से फ़ॉन्ट डाउनलोड करने के तरीके के बारे में ज़्यादा जानने के लिए, डाउनलोड किए जा सकने वाले फ़ॉन्ट का सैंपल ऐप्लिकेशन देखें.

AndroidX Core के साथ, डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा का इस्तेमाल करना

AndroidX Core, Android API के वर्शन 14 या इसके बाद के वर्शन वाले डिवाइसों पर, डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा के लिए सहायता उपलब्ध कराता है. androidx.core.provider पैकेज में, FontsContractCompat और FontRequest क्लास शामिल हैं. इनकी मदद से, पहले के वर्शन के साथ काम करने वाली, डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा के लिए सहायता लागू की जा सकती है. AndroidX क्लास में, फ़्रेमवर्क के तरीकों जैसे तरीके शामिल होते हैं. साथ ही, फ़ॉन्ट डाउनलोड करने की प्रोसेस, इस पेज पर प्रोग्राम के ज़रिए, डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा का इस्तेमाल करना सेक्शन में बताई गई प्रोसेस जैसी ही होती है.

AndroidX का इस्तेमाल करके फ़ॉन्ट डाउनलोड करने के लिए, androidx.core.provider पैकेज से FontsContractCompat और FontRequest क्लास इंपोर्ट करें. FontsContract और android.graphics.fonts.FontRequest फ़्रेमवर्क क्लास के बजाय, इन क्लास के इंस्टेंस बनाएं.

AndroidX Core डिपेंडेंसी जोड़ना

FontsContractCompat और FontRequest क्लास का इस्तेमाल करने के लिए, आपको अपने डेवलपमेंट एनवायरमेंट में, अपने ऐप्लिकेशन प्रोजेक्ट की क्लासपाथ डिपेंडेंसी में बदलाव करना होगा.

अपने ऐप्लिकेशन प्रोजेक्ट में AndroidX Core जोड़ने के लिए, अपने ऐप्लिकेशन की build.gradle फ़ाइल में यह डिपेंडेंसी जोड़ें:

शानदार

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

Kotlin

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

एक्सएमएल में, डाउनलोड किए जा सकने वाले फ़ॉन्ट को संसाधन के तौर पर इस्तेमाल करना

Android 8.0 (एपीआई लेवल 26) और AndroidX Core, एक्सएमएल लेआउट में कस्टम फ़ॉन्ट को संसाधन के तौर पर एलान करने का तेज़ और ज़्यादा सुविधाजनक तरीका उपलब्ध कराते हैं. इसका मतलब है कि फ़ॉन्ट को ऐसेट के तौर पर बंडल करने की ज़रूरत नहीं है. अपनी पूरी थीम के लिए, कस्टम फ़ॉन्ट तय किया जा सकता है. इससे, अलग-अलग वेट और स्टाइल (जैसे, बोल्ड, मीडियम या लाइट) के लिए, इस्तेमाल करने की सुविधा बेहतर होती है.

  1. res/font फ़ोल्डर में, नई एक्सएमएल फ़ाइल बनाएं.
  2. एक <font-family> रूट एलिमेंट जोड़ें और फ़ॉन्ट से जुड़े एट्रिब्यूट सेट करें. जैसा कि नीचे दी गई सैंपल एक्सएमएल फ़ाइल में दिखाया गया है:
  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 के तौर पर रेफ़र करें. प्रोग्राम के ज़रिए फ़ाइल वापस पाने के लिए, getFont() तरीके का भी इस्तेमाल किया जा सकता है. जैसे, getFont(R.font.font_file_name).

मेनिफ़ेस्ट में, फ़ॉन्ट का पहले से एलान करना

लेआउट इन्फ़्लेशन और संसाधन वापस पाना, सिंक्रोनस टास्क हैं. डिफ़ॉल्ट रूप से, फ़ॉन्ट वापस पाने की पहली कोशिश से, फ़ॉन्ट की सेवा देने वाली कंपनी को अनुरोध भेजा जाता है. इसलिए, पहले लेआउट का समय बढ़ जाता है. देरी से बचने के लिए, अपने मेनिफ़ेस्ट में उन फ़ॉन्ट का पहले से एलान किया जा सकता है जिन्हें वापस पाना है. सिस्टम के, सेवा देने वाली कंपनी से फ़ॉन्ट वापस पाने के बाद, वह तुरंत उपलब्ध हो जाता है. अगर फ़ॉन्ट वापस पाने में उम्मीद से ज़्यादा समय लगता है, तो सिस्टम, फ़ेच करने की प्रोसेस को रोक देता है और डिफ़ॉल्ट फ़ॉन्ट का इस्तेमाल करता है.

मेनिफ़ेस्ट में, फ़ॉन्ट का पहले से एलान करने के लिए, यह तरीका अपनाएं:

  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 टैग का इस्तेमाल करें.
  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 में, डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा