ডাউনলোডযোগ্য ফন্ট ব্যবহার করুন

কম্পোজ পদ্ধতিটি চেষ্টা করুন
জেটপ্যাক কম্পোজ হলো অ্যান্ড্রয়েডের জন্য প্রস্তাবিত UI টুলকিট। কম্পোজে কীভাবে টেক্সট ব্যবহার করবেন তা জানুন।

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

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

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

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

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

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

মৌলিক বিষয়গুলো

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

অ্যান্ড্রয়েড স্টুডিও এবং গুগল প্লে পরিষেবার সাথে ডাউনলোডযোগ্য ফন্ট ব্যবহার করুন

আপনি অ্যান্ড্রয়েড স্টুডিও ৩.০ বা তার উচ্চতর সংস্করণ ব্যবহার করে আপনার অ্যাপ্লিকেশনটিকে ফন্ট ডাউনলোড করার জন্য সেট করতে পারেন। ডাউনলোডযোগ্য ফন্টের বৈশিষ্ট্যগুলো ব্যবহার শুরু করতে, আপনি গুগল প্লে পরিষেবা থেকে ফন্ট সরবরাহকারীকে ব্যবহার করতে পারেন।

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

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

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

অ্যান্ড্রয়েড ৮.০ (এপিআই লেভেল ২৬) থেকে, অ্যান্ড্রয়েডএক্স কোর ডাউনলোডযোগ্য ফন্টের জন্য সম্পূর্ণ সমর্থন প্রদান করে। অ্যান্ড্রয়েডএক্স কোর লাইব্রেরি ব্যবহার সম্পর্কে আরও তথ্যের জন্য, এই পৃষ্ঠার 'ডাউনলোডযোগ্য ফন্ট অ্যান্ড্রয়েডএক্স কোর লাইব্রেরি' বিভাগটি দেখুন।

প্রোগ্রাম্যাটিকভাবে ডাউনলোডযোগ্য ফন্ট বৈশিষ্ট্যটি ব্যবহার করতে, দুটি মূল ক্লাসের সাথে ইন্টারঅ্যাক্ট করুন:

  • android.graphics.fonts.FontRequest : এই ক্লাসটি আপনাকে একটি ফন্ট অনুরোধ তৈরি করতে দেয়।
  • FontsContractCompat : এই ক্লাসটি আপনাকে ফন্ট অনুরোধের ভিত্তিতে একটি নতুন Typeface অবজেক্ট তৈরি করতে দেয়।

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

ফন্ট ডাউনলোড করতে, নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:

  1. প্রোভাইডার থেকে ফন্ট অনুরোধ করার জন্য android.graphics.fonts.FontRequest ক্লাসের একটি ইনস্ট্যান্স তৈরি করুন। একটি অনুরোধ তৈরি করতে, নিম্নলিখিত প্যারামিটারগুলো পাস করুন:
    • ফন্ট সরবরাহকারী কর্তৃপক্ষ।
    • প্রদানকারীর পরিচয় যাচাই করার জন্য ফন্ট প্রদানকারী প্যাকেজ।
    • ফন্টের স্ট্রিং কোয়েরি। কোয়েরি ফরম্যাট সম্পর্কে আরও তথ্যের জন্য, আপনার ফন্ট প্রদানকারীর ডকুমেন্টেশন দেখুন, যেমন গুগল ফন্টস
    • প্রদানকারীর পরিচয় যাচাই করার জন্য সার্টিফিকেটগুলোর হ্যাশ সেটের একটি তালিকা।

    কোটলিন

    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 ক্লাসের একটি ইনস্ট্যান্স
    • ফন্ট অনুরোধের ফলাফল গ্রহণ করার জন্য একটি কলব্যাক।
    • একটি থ্রেডে ফন্ট আনার জন্য একটি হ্যান্ডলার।

নিম্নলিখিত নমুনা কোডটি ডাউনলোডযোগ্য ফন্ট তৈরির সামগ্রিক প্রক্রিয়াটি তুলে ধরে:

কোটলিন

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);

ফন্ট প্রোভাইডার থেকে কীভাবে ফন্ট ডাউনলোড করতে হয়, সে সম্পর্কে আরও তথ্যের জন্য ডাউনলোডেবলফন্টস স্যাম্পল অ্যাপটি দেখুন।

AndroidX Core-এর সাথে ডাউনলোডযোগ্য ফন্ট ব্যবহার করুন

অ্যান্ড্রয়েডএক্স কোর, অ্যান্ড্রয়েড এপিআই সংস্করণ ১৪ বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে ডাউনলোডযোগ্য ফন্ট ফিচারের জন্য সমর্থন প্রদান করে। androidx.core.provider প্যাকেজটিতে পশ্চাৎ-সামঞ্জস্যপূর্ণ ডাউনলোডযোগ্য ফন্ট ফিচারের সমর্থন বাস্তবায়নের জন্য FontsContractCompat এবং FontRequest ক্লাস রয়েছে। অ্যান্ড্রয়েডএক্স ক্লাসগুলিতে ফ্রেমওয়ার্ক মেথডগুলির অনুরূপ মেথড রয়েছে, এবং ফন্ট ডাউনলোড করার প্রক্রিয়াটি এই পৃষ্ঠার "প্রোগ্রাম্যাটিকভাবে ডাউনলোডযোগ্য ফন্ট ব্যবহার" সম্পর্কিত বিভাগে বর্ণিত পদ্ধতির মতোই।

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"
}

কোটলিন

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

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

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

  1. res/font ফোল্ডারে একটি নতুন XML ফাইল তৈরি করুন।
  2. নিম্নলিখিত নমুনা XML ফাইলে দেখানো অনুযায়ী একটি <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. লেআউট XML ফাইলে ফাইলটিকে @font/font_file_name হিসেবে উল্লেখ করুন। এছাড়াও, আপনি প্রোগ্রাম্যাটিকভাবে ফাইলটি পাওয়ার জন্য getFont() মেথডটি ব্যবহার করতে পারেন, যেমন getFont(R.font.font_file_name)

ম্যানিফেস্টে ফন্টগুলো আগে থেকে ঘোষণা করুন

লেআউট ইনফ্লেশন এবং রিসোর্স পুনরুদ্ধার হলো সিনক্রোনাস টাস্ক। ডিফল্টরূপে, ফন্ট পুনরুদ্ধারের প্রথম প্রচেষ্টা ফন্ট প্রোভাইডারের কাছে একটি অনুরোধ পাঠায়, এবং এর ফলে প্রথম লেআউটের সময় বেড়ে যায়। এই বিলম্ব এড়াতে, আপনি আপনার ম্যানিফেস্টে যে ফন্টগুলো পুনরুদ্ধার করতে হবে, সেগুলো আগে থেকে ঘোষণা করে রাখতে পারেন। সিস্টেম প্রোভাইডারের কাছ থেকে ফন্টটি পুনরুদ্ধার করার পর, তা অবিলম্বে উপলব্ধ হয়। যদি ফন্ট পুনরুদ্ধারে প্রত্যাশার চেয়ে বেশি সময় লাগে, তবে সিস্টেম ফেচিং প্রক্রিয়াটি বাতিল করে দেয় এবং ডিফল্ট ফন্ট ব্যবহার করে।

ম্যানিফেস্টে ফন্ট আগে থেকে ঘোষণা করতে, নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:

  1. res/values/arrays.xml এ একটি resources অ্যারে তৈরি করুন এবং যে ফন্টগুলো আপনি প্রিফেচ করতে চান, সেগুলো ঘোষণা করুন।
  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"

কম্পোজে ডাউনলোডযোগ্য ফন্ট