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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 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 का इस्तेमाल करके फ़ॉन्ट डाउनलोड करने के लिए, androidx.core.provider पैकेज से FontsContractCompat और FontRequest क्लास इंपोर्ट करें. FontsContract और android.graphics.fonts.FontRequest फ़्रेमवर्क क्लास के बजाय, इन क्लास के इंस्टेंस बनाएं.

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

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

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

Groovy

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

Kotlin

dependencies {
    ...
    implementation("androidx.core:core-ktx:1.17.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 में एक resources array बनाएं और उन फ़ॉन्ट का एलान करें जिन्हें आपको प्रीफ़ेच करना है.
  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 में डाउनलोड किए जा सकने वाले फ़ॉन्ट