ডাউনলোড করা যাবে এমন ফন্ট ব্যবহার করুন

Compose-এর মাধ্যমে চেষ্টা করুন
Jetpack Compose হল Android-এর জন্য সাজেস্ট করা UI টুলকিট। Compose-এ কীভাবে টেক্সট ব্যবহার করতে হয় তা জানুন।

ডাউনলোড করা যাবে এমন ফন্ট ফিচারটি API-কে অ্যাপে ফাইল বান্ডেল করার বা অ্যাপকে ফন্ট ডাউনলোড করতে দেওয়ার পরিবর্তে প্রদানকারী অ্যাপ্লিকেশন থেকে ফন্টের অনুরোধ করতে দেয়। AndroidX Core লাইব্রেরির মাধ্যমে Android API ভার্সন ১৪ ও তার পরবর্তী যেকোনও ভার্সনে চলা ডিভাইসে ডাউনলোড করা যাবে এমন ফন্ট উপলভ্য।

ডাউনলোড করা যাবে এমন ফন্ট নিম্নলিখিত সুবিধাগুলি অফার করে:

  • অ্যাপের সাইজ কমায়, তাই অ্যাপ ইনস্টল করার সাফল্যের হার বাড়ে।
  • সামগ্রিক সিস্টেমের স্বাস্থ্য উন্নত করে, কারণ একাধিক অ্যাপ একটি প্রোভাইডারের মাধ্যমে একই ফন্ট শেয়ার করতে পারে। এটি ব্যবহারকারীর মোবাইল ডেটা, ফোন মেমরি ও ডিস্ক স্টোরেজে খালি জায়গা সাশ্রয় করে। এই মডেলে, প্রয়োজন হলে নেটওয়ার্কের মাধ্যমে ফন্ট ফেচ করা হয়।
ডাউনলোড করা যায় এমন ফন্ট ব্যবহার করে দেখার জন্য, DownloadableFonts স্যাম্পেল অ্যাপ দেখুন।

ডাউনলোড করা যায় এমন ফন্ট কীভাবে কাজ করে?

ফন্ট প্রদানকারী হল এমন একটি অ্যাপ্লিকেশন যা ফন্টগুলি পুনরুদ্ধার করে এবং স্থানীয়ভাবে ক্যাশে করে যাতে অন্যান্য অ্যাপগুলি ফন্টের জন্য অনুরোধ করতে এবং শেয়ার করতে পারে। নিচের ছবিতে এই প্রসেসটি দেখানো হয়েছে।

ইমোজি কম্প্যাট প্রসেসের প্রধান কম্পোনেন্টগুলি দেখানো ছবি
ছবি ১. ডাউনলোড করা যাবে এমন ফন্ট প্রসেস।

প্রাথমিক বিষয়

আপনি নিম্নলিখিত উপায়ে ডাউনলোড করা যাবে এমন ফন্ট ফিচার ব্যবহার করতে পারবেন, যা পরবর্তী বিভাগে বিস্তারিতভাবে আলোচনা করা হয়েছে:

Android Studio ও Google Play পরিষেবার সাথে ডাউনলোড করা যাবে এমন ফন্ট ব্যবহার করা

Android Studio 3.0 বা তার পরবর্তী যেকোনও ভার্সন ব্যবহার করে ফন্ট ডাউনলোড করার জন্য আপনার অ্যাপ্লিকেশন সেট করতে পারবেন। ডাউনলোড করা যায় এমন ফন্ট ফিচার ব্যবহার শুরু করতে, আপনি Google Play পরিষেবা থেকে ফন্ট প্রোভাইডার ব্যবহার করতে পারেন।

  1. লেআউট এডিটর থেকে TextView বেছে নিন। তারপর, অ্যাট্রিবিউট বিকল্পের অধীনে, fontFamily > আরও ফন্ট বিকল্প বেছে নিন।
    Android Studio লেআউট এডিটর দেখানো ছবি
    ছবি ২. লেআউট এডিটর ব্যবহার করে।
    রিসোর্স উইন্ডোটি দেখা যাবে।
  2. সোর্স মেনু থেকে Google Fonts বেছে নিন।
  3. ফন্ট বক্সে, "ডাউনলোড করা যাবে" বিভাগ থেকে একটি ফন্ট বেছে নিন।
  4. ডাউনলোড করা যাবে এমন ফন্ট তৈরি করুন বিকল্প বেছে নিয়ে ঠিক আছে বিকল্পে ক্লিক করুন।
    রিসোর্স উইন্ডো থেকে কীভাবে ফন্ট বেছে নিতে হয় তা ছবিতে দেখানো হয়েছে
    ছবি ৩. রিসোর্স উইন্ডো থেকে ফন্ট বেছে নেওয়া।
  5. আপনার অ্যাপে ফন্ট সঠিকভাবে রেন্ডার করার জন্য প্রয়োজনীয় প্রাসঙ্গিক XML ফাইল Android Studio অটোমেটিক জেনারেট করে।

    ফন্ট কীভাবে প্রিভিউ করতে হয় তা দেখানো ছবি
    ছবি ৪. ফন্ট ফাইলের প্রিভিউ দেখা হচ্ছে।

প্রোগ্রাম্যাটিক্যালি ডাউনলোড করা যাবে এমন ফন্ট ব্যবহার করুন

Android 8.0 (API লেভেল ২৬) থেকে, 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
    )

    জাভা

    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)

জাভা

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-এর সাথে ডাউনলোড করা যাবে এমন ফন্ট ব্যবহার করা

Android API ভার্সন ১৪ বা তার পরবর্তী ভার্সনে চলা ডিভাইসে ডাউনলোড করা যাবে এমন ফন্ট ফিচারের জন্য AndroidX Core সহায়তা প্রদান করে। 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.19.1"
}

Kotlin

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

XML-এ রিসোর্স হিসেবে ডাউনলোড করা যাবে এমন ফন্ট ব্যবহার করা

Android 8.0 (API লেভেল ২৬) এবং AndroidX Core, XML লেআউটে রিসোর্স হিসেবে কাস্টম ফন্ট ঘোষণা করার আরও দ্রুত এবং আরও সুবিধাজনক উপায় অফার করে। এর অর্থ হল, অ্যাসেট হিসেবে ফন্ট বান্ডেল করার প্রয়োজন নেই। আপনি সম্পূর্ণ থিমের জন্য কাস্টম ফন্ট নির্ধারণ করতে পারবেন, যা বোল্ড, মিডিয়াম বা লাইটের মতো একাধিক ওয়েট ও স্টাইলের জন্য ব্যবহারযোগ্যতা বাড়ায়।

  1. res/font ফোল্ডারে একটি নতুন XML ফাইল তৈরি করুন।
  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. লেআউট XML ফাইলে @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"