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

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

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

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

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

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

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

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

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

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

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

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

  1. लेआउट एडिटर में, कोई TextView चुनें. इसके बाद, एट्रिब्यूट में जाकर, फ़ॉन्ट फ़ैमिली > ज़्यादा फ़ॉन्ट चुनें.
    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:2.2.0"
}

Kotlin

dependencies {
    ...
    implementation("androidx.core:core-ktx:2.2.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() जैसे तरीकों का भी इस्तेमाल किया जा सकता है.

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

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

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

  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 में डाउनलोड किए जा सकने वाले फ़ॉन्ट