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

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

डाउनलोड किए जा सकने वाले फ़ॉन्ट की सुविधा की मदद से, एपीआई किसी प्रोवाइडर ऐप्लिकेशन से फ़ॉन्ट का अनुरोध कर सकते हैं. इसके लिए, ऐप्लिकेशन में फ़ाइलों को बंडल करने या ऐप्लिकेशन को फ़ॉन्ट डाउनलोड करने की अनुमति देने की ज़रूरत नहीं होती. डाउनलोड किए जा सकने वाले फ़ॉन्ट, AndroidX Core लाइब्रेरी के ज़रिए Android एपीआई के वर्शन 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 एपीआई का इस्तेमाल करके, फ़ॉन्ट उपलब्ध कराने वाली कंपनी से फ़ॉन्ट हासिल करता है. हर प्रोवाइडर के पास, 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 एपीआई के वर्शन 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.19.1"
}

Kotlin

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

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

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"