অ্যান্ড্রয়েড - কাস্টম ফন্ট ব্যবহার করে


265

আমি একটিতে একটি কাস্টম ফন্ট প্রয়োগ করেছি TextView, তবে এটি টাইপফেসটি বদলেছে বলে মনে হচ্ছে না।

আমার কোডটি এখানে:

    Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/myFont.ttf");
    TextView myTextView = (TextView)findViewById(R.id.myTextView);
    myTextView.setTypeface(myTypeface);

কেউ কি আমাকে এই সমস্যা থেকে সরিয়ে দিতে পারেন?


1
আপনার সিনট্যাক্সে একটি ত্রুটি আছে, হওয়া উচিতmyTextView.setTypeface(myTypeface);
ইউটাধামো

এই থ্রেড অনুরূপ: stackoverflow.com/a/14558090/693752
Snicolas

কার্যকারী উদাহরণটি দেখুন javatechig.com/2013/03/19/using-terna-fouts-in-android- ভিউ
নীলাঞ্চল


পুরো অ্যাপ্লিকেশনটির জন্য ফন্টটি পরিবর্তন করার জন্য এখানে আপনার একটি কার্যকর উপায় রয়েছে: stackoverflow.com/questions/18847531/…
দিয়েগো Palomar

উত্তর:


229

মোবাইলটুট + এ অ্যান্ড্রয়েডের জন্য পাঠ্য বিন্যাসের বিষয়ে খুব ভাল টিউটোরিয়াল রয়েছে। দ্রুত পরামর্শ: অ্যান্ড্রয়েড ফন্টগুলি কাস্টমাইজ করুন

সম্পাদনা: এটি এখন নিজেই পরীক্ষিত। সমাধান এখানে। আপনি ফন্ট নামে একটি সাবফোল্ডার ব্যবহার করতে পারেন তবে এটি assetsফোল্ডারে নয় ফোল্ডারে যেতে হবে res। সুতরাং

সম্পদ / ফন্ট

এছাড়াও নিশ্চিত করুন যে ফন্টের সমাপ্তি মানে হ'ল ফন্ট ফাইলের সমাপ্তি হ'ল সমস্ত নিম্নতর ক্ষেত্রে। অন্য কথায় এটি হওয়া উচিত নয় myFont.TTFতবে myfont.ttf এই পদ্ধতিটি অবশ্যই নিম্ন ক্ষেত্রে হওয়া উচিত


সমাধানটি দিয়ে এখন আমার প্রতিক্রিয়া সম্পাদনা করেছেন।
অক্টাভিয়ান এ। দামিয়েন

আপনি কি আমাকে কিছু ওয়ার্কিং ডেমো প্রকল্প প্রেরণ করতে পারেন? আমি সম্পদ / ফন্ট / xyz.ttf এবং সম্পদ / xyz.ttf ফোল্ডারে উভয় চেষ্টা করেছি কিন্তু এটি ফন্টটি নেয় না। এটি কেবলমাত্র ডিফল্ট ফন্ট প্রদর্শন করে ..
রেটলেসনাট

2
অবশ্যই জিপ আপ প্রকল্পের লিঙ্কটি এখানে। dl.dropbox.com/u/8288893/customFont.zip
Octavian উ: Damiean

5
যদি আপনি এই টিউটোরিয়ালটি অনুসরণ করে চলেছেন তবে নিশ্চিত করুন যে আপনি টাইপফেস.ক্রিয়েটফ্রমসেট (getAssets (), "ফন্ট / আপনারফন্ট.টিএফ") পাথটি ব্যবহার করেছেন; আপনি যদি এটি
হ'ল

ফাইলনেমে "সম্পদ /" অন্তর্ভুক্ত করবেন না (কারণ createFromAssetফাংশনটি সরাসরি assetsডিরেক্টরিতে নির্দেশ করে)
টোথার

55

এই থ্রেডে বর্ণিত বেশিরভাগ সমাধানের চেষ্টা করার পরে, আমি ঘটনাক্রমে ক্যালিগ্রাফি ( https://github.com/chrisjenx/Calligraphy ) পেয়েছি - ক্রিস্টোফার জেনকিনসের একটি লাইব্রেরি যা আপনাকে সহজেই আপনার অ্যাপ্লিকেশনে কাস্টম ফন্টগুলি যুক্ত করতে দেয়। এখানে প্রস্তাবিত পদ্ধতির সাথে তুলনা করে তার লিবিবার সুবিধাগুলি হ'ল:

  1. আপনাকে নিজের নিজস্ব ওভারডেন টেক্সটভিউ উপাদানটি প্রবর্তন করতে হবে না, আপনি বিল্ট-ইন টেক্সটভিউটি ব্যবহার করেন
  2. আপনি সহজেই গ্রেডল ব্যবহার করে গ্রন্থাগারটি অন্তর্ভুক্ত করতে পারেন
  3. গ্রন্থাগারটি আপনার ফন্টের পছন্দ সীমাবদ্ধ করে না; আপনি সম্পত্তির dir এ আপনার পছন্দসইগুলি যুক্ত করুন
  4. আপনি কেবলমাত্র কাস্টম পাঠ্য দর্শন পাবেন না - অন্যান্য সমস্ত পাঠ্য-ভিত্তিক অ্যান্ড্রয়েড সংযোগগুলিও আপনার কাস্টম ফন্ট ব্যবহার করে প্রদর্শিত হবে।

1
কি আকার লাইব্রেরির একটি গুরুত্বপূর্ণ প্রশ্ন হল, কারণ যে অ্যাপ্লিকেশান আকার প্রভাবিত করত।
eRaisedToX

32

আমি জানি ইতিমধ্যে ভাল উত্তর আছে, কিন্তু এখানে একটি সম্পূর্ণ কাজ বাস্তবায়ন।

এখানে কাস্টম পাঠ্য দর্শনটি রয়েছে:

package com.mycompany.myapp.widget;

/**
 * Text view with a custom font.
 * <p/>
 * In the XML, use something like {@code customAttrs:customFont="roboto-thin"}. The list of fonts
 * that are currently supported are defined in the enum {@link CustomFont}. Remember to also add
 * {@code xmlns:customAttrs="http://schemas.android.com/apk/res-auto"} in the header.
 */
public class CustomFontTextView extends TextView {

    private static final String sScheme =
            "http://schemas.android.com/apk/res-auto";
    private static final String sAttribute = "customFont";

    static enum CustomFont {
        ROBOTO_THIN("fonts/Roboto-Thin.ttf"),
        ROBOTO_LIGHT("fonts/Roboto-Light.ttf");

        private final String fileName;

        CustomFont(String fileName) {
            this.fileName = fileName;
        }

        static CustomFont fromString(String fontName) {
            return CustomFont.valueOf(fontName.toUpperCase(Locale.US));
        }

        public Typeface asTypeface(Context context) {
            return Typeface.createFromAsset(context.getAssets(), fileName);
        }
    }

    public CustomFontTextView(Context context, AttributeSet attrs) {
        super(context, attrs);

        if (isInEditMode()) {
            return;
        } else {
            final String fontName = attrs.getAttributeValue(sScheme, sAttribute);

            if (fontName == null) {
                throw new IllegalArgumentException("You must provide \"" + sAttribute + "\" for your text view");
            } else {
                final Typeface customTypeface = CustomFont.fromString(fontName).asTypeface(context);
                setTypeface(customTypeface);
            }
        }
    }
}

এখানে কাস্টম বৈশিষ্ট্য। এটি আপনার res/attrs.xmlফাইলে যেতে হবে:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="CustomFontTextView">
        <attr name="customFont" format="string"/>
    </declare-styleable>
</resources>

এবং আপনি এটি কীভাবে ব্যবহার করবেন তা এখানে। আমি এটি মোড়ানোর জন্য এবং customAttrঘোষণাপত্রটি দেখানোর জন্য একটি আপেক্ষিক বিন্যাস ব্যবহার করব , তবে এটি ইতিমধ্যে আপনার আগে যা লেআউট রয়েছে তা হতে পারে।

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:customAttrs="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.mycompany.myapp.widget.CustomFontTextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="foobar"
         customAttrs:customFont="roboto_thin" />

</RelativeLayout>

customAttrsআমার প্রকল্পে কী বোঝায় ?
স্কাইনেট

@ স্কাইনেট এটি আপনার রুট ভিউতে সংজ্ঞায়িত নেমস্পেসকে বোঝায় xmlns:customAttrs="http://schemas.android.com/apk/res-auto"। এটি স্বয়ংক্রিয়ভাবে কাস্টম দর্শনের জন্য সেট করা বৈশিষ্ট্যগুলি পেয়ে যায়। এক্ষেত্রে আপনার কাছে কাস্টমফন্ট নামক একটি অ্যাট্রিবিউট আছে যা এন্টারস.এক্সএমএল এ সংজ্ঞায়িত হয়েছে এটি বোঝার একটি সহজ উপায় হল xmlns:android="http://schemas.android.com/apk/res/android"আপনার অ্যান্ড্রয়েড বৈশিষ্ট্যের জন্য নেমস্পেসটি কোনটি সংজ্ঞায়িত করে তা দেখুন । সুতরাং আপনি যদি aপরিবর্তে android:textএটি পরিবর্তে এটি হতে চাই a:text
কোডিজেঞ্জেল

14

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


13

আপনি যদি ফন্টটি সঠিক জায়গায় রেখে দেন এবং ফন্ট ফাইলে নিজেই কোনও ত্রুটি না থাকে তবে আপনার কোডটি এমনভাবে কাজ করা উচিত, RATTLESNAKE।

তবে, আপনি যদি আপনার লেআউট এক্সএমএল-তে কোনও ফন্ট সংজ্ঞায়িত করতে পারেন তবে এটি অনেক সহজ হবে:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <!-- This text view is styled with the app theme -->
    <com.innovattic.font.FontTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This uses my font in bold italic style" />

    <!-- This text view is styled here and overrides the app theme -->
    <com.innovattic.font.FontTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:flFont="anotherFont"
        android:textStyle="normal"
        android:text="This uses another font in normal style" />

    <!-- This text view is styled with a style and overrides the app theme -->
    <com.innovattic.font.FontTextView
        style="@style/StylishFont"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This also uses another font in normal style" />

</LinearLayout>

সঙ্গী সহ res/values/styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">

    <!-- Application theme -->
    <!-- Use a different parent if you don't want Holo Light -->
    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
        <item name="android:textViewStyle">@style/MyTextViewStyle</item>
    </style>

    <!-- Style to use for ALL text views (including FontTextView) -->
    <!-- Use a different parent if you don't want Holo Light -->
    <style name="MyTextViewStyle" parent="@android:style/Widget.Holo.Light.TextView">
        <item name="android:textAppearance">@style/MyTextAppearance</item>
    </style>

    <!-- Text appearance to use for ALL text views (including FontTextView) -->
    <!-- Use a different parent if you don't want Holo Light -->
    <style name="MyTextAppearance" parent="@android:style/TextAppearance.Holo">
        <!-- Alternatively, reference this font with the name "aspergit" -->
        <!-- Note that only our own TextView's will use the font attribute -->
        <item name="flFont">someFont</item>
        <item name="android:textStyle">bold|italic</item>
    </style>

    <!-- Alternative style, maybe for some other widget -->
    <style name="StylishFont">
        <item name="flFont">anotherFont</item>
        <item name="android:textStyle">normal</item>
    </style>

</resources>

আমি এই উদ্দেশ্যে বিশেষত বেশ কয়েকটি সরঞ্জাম তৈরি করেছি। পড়ুন এই প্রকল্পের GitHub থেকে, কিংবা এই কটাক্ষপাত করা ব্লগ পোস্ট যা পুরো জিনিস ব্যাখ্যা করে।


13

অ্যান্ড্রয়েড ওের পূর্বরূপ রিলিজ থেকে এটি করার সর্বোত্তম উপায়টি হ'ল:

এটি কেবল তখনই কাজ করে যদি আপনার অ্যান্ড্রয়েড স্টুডিও -২.৪ বা তার বেশি থাকে

  1. রেজোল্ড ফোল্ডারে ডান ক্লিক করুন এবং নতুন> অ্যান্ড্রয়েড রিসোর্স ডিরেক্টরিতে যান । নতুন
    রিসোর্স ডিরেক্টরি উইন্ডো প্রদর্শিত হবে।
  2. রিসোর্স ধরণের তালিকায় ফন্ট নির্বাচন করুন এবং তারপরে ওকে ক্লিক করুন।
  3. ফন্ট ফোল্ডারে আপনার ফন্ট ফাইলগুলি যোগ করুন লোকের ফোল্ডারের গঠন নিচে উত্পন্ন R.font.dancing_script, R.font.la_laএবং R.font.ba_ba
  4. সম্পাদনায় ফাইলের ফন্টগুলি পূর্বরূপ দেখতে একটি ফন্ট ফাইল ডাবল ক্লিক করুন

পরবর্তী আমাদের অবশ্যই একটি ফন্ট পরিবার তৈরি করতে হবে:

  1. ফন্ট ফোল্ডারে ডান ক্লিক করুন এবং নতুন> ফন্ট রিসোর্স ফাইলে যান । নতুন রিসোর্স ফাইল উইন্ডো প্রদর্শিত হবে।
  2. ফাইলের নাম লিখুন এবং তারপরে ওকে ক্লিক করুন । নতুন ফন্টের রিসোর্স এক্সএমএল সম্পাদকটিতে খোলে।
  3. ফন্ট ট্যাগ উপাদানটিতে প্রতিটি ফন্ট ফাইল, শৈলী এবং ওজন বৈশিষ্ট্য সংযুক্ত করুন। নিম্নলিখিত এক্সএমএল হ'ল ফন্ট রিসোর্স এক্সএমএলে ফন্ট সম্পর্কিত বৈশিষ্ট্য যুক্ত করার চিত্র তুলে ধরেছে:

টেক্সটভিউতে ফন্ট যুক্ত করা হচ্ছে:

   <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="@font/hey_fontfamily"/>

যেমন ডকুমেন্টেশন থেকে

হরফ দিয়ে কাজ করা

সমস্ত পদক্ষেপ সঠিক।


4
ony api> 26 ((
ম্যাক্স্প


এটি একটি দুর্দান্ত পদক্ষেপ # 3 অনুপস্থিত ... আপনি কীভাবে এটি করেন?
কোড উইজেট

12

অ্যান্ড্রয়েডের কাস্টম ফন্টগুলির জন্য সম্পদ ফোল্ডারের নামের মধ্যে একটি ফোল্ডার তৈরি করুন এটি "ফন্টস" এতে আপনার পছন্দসই ফন্টস.টিটিএফ বা .otf ফাইল রাখে।

আপনি যদি ইউআইবেসফ্রেগমেন্ট প্রসারিত করেন:

Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Arial.ttf");
        tv.setTypeface(font);

অন্যথায় যদি ক্রিয়াকলাপ প্রসারিত হয়:

Typeface font = Typeface.createFromAsset(getContext().getAssets(), "fonts/Arial.ttf");
        tv.setTypeface(font);

7

আপনি পিক্সালিউআই https://github.com/neopixl/PixlUI এ ব্যবহার করতে পারেন

তাদের .jar আমদানি করুন এবং এটি এক্সএমএলে ব্যবহার করুন

 <com.neopixl.pixlui.components.textview.TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world"
    pixlui:typeface="GearedSlab.ttf" />

4

যেহেতু আমি এসও তে উপস্থাপিত সমস্ত সমাধান নিয়ে সন্তুষ্ট নই, তাই আমি আমার সাথে এসেছি। এটি ট্যাগগুলির সাথে একটি সামান্য কৌশল অবলম্বন করা (যেমন আপনি নিজের কোডে ট্যাগ ব্যবহার করতে পারবেন না), আমি সেখানে ফন্টের পথটি রেখেছি। সুতরাং মতামত সংজ্ঞায়িত করার সময়, আপনি হয় এটি করতে পারেন:

<TextView
        android:id="@+id/textViewHello1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World 1"
        android:tag="fonts/Oswald-Regular.ttf"/>

অথবা এটা:

<TextView
        android:id="@+id/textViewHello2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World 2"
        style="@style/OswaldTextAppearance"/>

<style name="OswaldTextAppearance">
        <item name="android:tag">fonts/Oswald-Regular.ttf</item>
        <item name="android:textColor">#000000</item>
</style>

এখন আপনি এইভাবে দৃশ্যটি স্পষ্টভাবে অ্যাক্সেস / সেটআপ করতে পারবেন:

TextView textView = TextViewHelper.setupTextView(this, R.id.textViewHello1).setText("blah");

অথবা এর মাধ্যমে সবকিছু সেটআপ করুন:

TextViewHelper.setupTextViews(this, (ViewGroup) findViewById(R.id.parentLayout)); // parentLayout is the root view group (relative layout in my case)

এবং আপনি জিজ্ঞাসা যাদু ক্লাস কি? ক্রিয়াকলাপ এবং টুকরা উভয়ের জন্য সহায়ক পদ্ধতি সহ বেশিরভাগই অন্য এসও পোস্টগুলি থেকে আঠালো:

import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.HashMap;
import java.util.Map;

public class TextViewHelper {
    private static final Map<String, Typeface> mFontCache = new HashMap<>();

    private static Typeface getTypeface(Context context, String fontPath) {
        Typeface typeface;
        if (mFontCache.containsKey(fontPath)) {
            typeface = mFontCache.get(fontPath);
        } else {
            typeface = Typeface.createFromAsset(context.getAssets(), fontPath);
            mFontCache.put(fontPath, typeface);
        }
        return typeface;
    }

    public static void setupTextViews(Context context, ViewGroup parent) {
        for (int i = parent.getChildCount() - 1; i >= 0; i--) {
            final View child = parent.getChildAt(i);
            if (child instanceof ViewGroup) {
                setupTextViews(context, (ViewGroup) child);
            } else {
                if (child != null) {
                    TextViewHelper.setupTextView(context, child);
                }
            }
        }
    }

    public static void setupTextView(Context context, View view) {
        if (view instanceof TextView) {
            if (view.getTag() != null) // also inherited from TextView's style
            {
                TextView textView = (TextView) view;
                String fontPath = (String) textView.getTag();
                Typeface typeface = getTypeface(context, fontPath);
                if (typeface != null) {
                    textView.setTypeface(typeface);
                }
            }
        }
    }

    public static TextView setupTextView(View rootView, int id) {
        TextView textView = (TextView) rootView.findViewById(id);
        setupTextView(rootView.getContext().getApplicationContext(), textView);
        return textView;
    }

    public static TextView setupTextView(Activity activity, int id) {
        TextView textView = (TextView) activity.findViewById(id);
        setupTextView(activity.getApplicationContext(), textView);
        return textView;
    }
}

4

দুর্ভাগ্যক্রমে এর জন্য কোনও ভাল সমাধান নেই।

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

আপনি যেমন একটি বাহ্যিক ফন্ট ইউটিলিটি ব্যবহার করতে পারেন:

ক্যালিগ্রাফি হরফ সরঞ্জাম

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

এটি ঠিক করার জন্য এটি গুগলের কাছেই সত্য। অ্যান্ড্রয়েডে আমাদের আরও ভাল ফন্ট সমর্থন দরকার। আপনি যদি আইওএস থেকে সমাধানটি দেখেন তবে তাদের কাছে আক্ষরিকরূপে 100 টি ফন্টগুলি নির্বাচন করতে হবে from একটি কাস্টম ফন্ট চান? কেবল একটি টিএফএফ ড্রপ করুন এবং এটি ব্যবহারযোগ্য ..

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


2

উপরের কোডটি অনক্রিটে () সুপারিতে আপনার কল করার পরে এবং সেটকন্টেন্টভিউতে কল করার পরে নিশ্চিত করুন ()। এই ছোট বিবরণটি কিছুক্ষণের জন্য আমার স্তব্ধ হয়ে রইল।


2

সঙ্গে অ্যান্ড্রয়েড 8.0 অ্যাপ্লিকেশন কাস্টম ফন্ট ব্যবহার করে সহজ হয়ে ওঠে downloadable fonts। আমরা res/font/ folderপ্রজেক্ট ফোল্ডারে সরাসরি ফন্টগুলিতে যুক্ত করতে পারি এবং এটি করে ফন্টগুলি অ্যান্ড্রয়েড স্টুডিওতে স্বয়ংক্রিয়ভাবে উপলব্ধ হয়।

নাম ফন্টের সাথে ফোল্ডার অধীনে পুনরায় ফন্টে টাইপ করুন

এখন fontFamilyফন্টগুলির তালিকাতে অ্যাট্রিবিউট সেট করুন বা আরও ক্লিক করুন এবং আপনার পছন্দের ফন্ট নির্বাচন করুন। এটি আপনার টেক্সটভিউতে লাইন যুক্ত করবে tools:fontFamily="@font/your_font_file"

এটি স্বয়ংক্রিয়ভাবে কয়েকটি ফাইল উত্পন্ন করবে।

1. মান ফোল্ডারে এটি তৈরি করবে fonts_certs.xml

২. ম্যানিফেস্টে এটি এই লাইনগুলি যুক্ত করবে:

  <meta-data
            android:name="preloaded_fonts"
            android:resource="@array/preloaded_fonts" /> 

3। preloaded_fonts.xml

<resources>
    <array name="preloaded_fonts" translatable="false">
        <item>@font/open_sans_regular</item>
        <item>@font/open_sans_semibold</item>
    </array>
</resources>

2

আপনার নিজের পছন্দমতো বিভিন্ন কাস্টম ফন্ট সেট করতে আপনি সহজ ও সাধারণ ইজিফন্টগুলি তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করতে পারেন TextView। এই লাইব্রেরিটি ব্যবহার করে আপনার সম্পদ / ফন্ট ফোল্ডারে ফন্ট ডাউনলোড এবং যুক্ত করার বিষয়ে চিন্তা করা উচিত নয়। টাইপফেস অবজেক্ট তৈরি সম্পর্কেও।

পরিবর্তে

Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/myFont.ttf");
TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(myTypeface);

কেবল:

TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(EasyFonts.robotoThin(this));

এই গ্রন্থাগারটি নিম্নলিখিত ফন্টের মুখোমুখি সরবরাহ করে।

  • তে Roboto
  • ড্রড সেরিফ
  • ড্রড রোবট
  • স্বাধীনতা
  • মজা রাইজার
  • অ্যান্ড্রয়েড নেশন
  • সবুজ অ্যাভোকাডো
  • স্বীকার


1

আপনি যদি নেটওয়ার্ক থেকে ফন্টটি লোড করতে চান বা সহজেই এটি স্টাইল করতে চান তবে আপনি ব্যবহার করতে পারেন:

https://github.com/shellum/fontView

উদাহরণ:

<!--Layout-->
<com.finalhack.fontview.FontView
        android:id="@+id/someFontIcon"
        android:layout_width="80dp"
        android:layout_height="80dp" />

//Java:
fontView.setupFont("http://blah.com/myfont.ttf", true, character, FontView.ImageType.CIRCLE);
fontView.addForegroundColor(Color.RED);
fontView.addBackgroundColor(Color.WHITE);

1

ঠিক আছে, সাত বছর পরে আপনি লাইব্রেরি 26 ++ textViewব্যবহার করে পুরো অ্যাপ্লিকেশনটি বা সহজে যা চান তা পরিবর্তন করতে পারবেন android.support

উদাহরণ:

আপনার ফন্ট প্যাকেজ অ্যাপ্লিকেশন / src / res / হরফ তৈরি করুন এবং এতে আপনার ফন্টটি সরান।

এখানে চিত্র বর্ণনা লিখুন

এবং আপনার অ্যাপ্লিকেশন থিমটিতে এটি একটি ফন্টফ্যামিলি হিসাবে যুক্ত করুন:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   . . . ...
    <item name="android:fontFamily">@font/demo</item>
</style>

textViewশুধুমাত্র সাথে ব্যবহারের উদাহরণ :

<style name="fontTextView" parent="@android:style/Widget.TextView">
    <item name="android:fontFamily">monospace</item>
</style>

এবং আপনার মূল থিমটিতে যুক্ত করুন:

<item name="android:textViewStyle">@style/fontTextView</item>

বর্তমানে এটি 8.1 এ 4.1 এপিআই জেলি বিন পর্যন্ত কাজ করেছে এবং এটি বিস্তৃত range


1

আপডেটের উত্তর: অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) এক্সএমএলে একটি নতুন বৈশিষ্ট্য, হরফ পরিচয় করিয়েছে। অ্যান্ড্রয়েড ৪.১ (এপিআই স্তর ১ 16) এবং তার থেকেও বেশি চলমান ডিভাইসগুলিতে কেবল এক্সএমএল বৈশিষ্ট্যটিতে ফন্টগুলি ব্যবহার করুন, সমর্থন লাইব্রেরি 26 ব্যবহার করুন।

এই লিঙ্কটি দেখুন


পুরানো উত্তর

ফন্টগুলি কাস্টমাইজ করার দুটি উপায় রয়েছে:

!!! সম্পদ / ফন্ট / iran_sans.ttf এ আমার কাস্টম ফন্ট



ওয়ে 1: রিফ্রাকশন টাইপফেস.ক্লাস || কেপ সবচেয়ে ভালো উপায়

ক্লাসে ফন্টস ওভাররাইড.সেট ডেফল্টফন্ট () কল করুন অ্যাপ্লিকেশন প্রসারিত করুন, এই কোডটি সমস্ত সফ্টওয়্যার ফন্ট, এমনকি টোস্ট ফন্টগুলিও পরিবর্তিত করবে

AppController.java

public class AppController extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        //Initial Font
        FontsOverride.setDefaultFont(getApplicationContext(), "MONOSPACE", "fonts/iran_sans.ttf");

    }
}

FontsOverride.java

public class FontsOverride {

    public static void setDefaultFont(Context context, String staticTypefaceFieldName, String fontAssetName) {
        final Typeface regular = Typeface.createFromAsset(context.getAssets(), fontAssetName);
        replaceFont(staticTypefaceFieldName, regular);
    }

    private static void replaceFont(String staticTypefaceFieldName, final Typeface newTypeface) {
        try {
            final Field staticField = Typeface.class.getDeclaredField(staticTypefaceFieldName);
            staticField.setAccessible(true);
            staticField.set(null, newTypeface);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}



ওয়ে 2: সেটটাইপফেস ব্যবহার করুন

বিশেষ দেখার জন্য হরফ পরিবর্তন করতে সেটআপ টাইপফেস () কল করুন।

CTextView.java

public class CTextView extends TextView {

    public CTextView(Context context) {
        super(context);
        init(context,null);
    }

    public CTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context,attrs);
    }

    public CTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context,attrs);
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public CTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init(context,attrs);
    }

    public void init(Context context, @Nullable AttributeSet attrs) {

        if (isInEditMode())
            return;

        // use setTypeface for change font this view
        setTypeface(FontUtils.getTypeface("fonts/iran_sans.ttf"));

    }
}

FontUtils.java

public class FontUtils {

    private static Hashtable<String, Typeface> fontCache = new Hashtable<>();

    public static Typeface getTypeface(String fontName) {
        Typeface tf = fontCache.get(fontName);
        if (tf == null) {
            try {
                tf = Typeface.createFromAsset(AppController.getInstance().getApplicationContext().getAssets(), fontName);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
            fontCache.put(fontName, tf);
        }
        return tf;
    }

}

0

এপিআই 26 হিসাবে এটি করার সঠিক পদ্ধতিটি এখানে অফিসিয়াল ডকুমেন্টেশনে বর্ণিত হয়েছে:

https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html

এর মধ্যে রেজটি / ফন্ট ফোল্ডারে টিটিএফ ফাইল স্থাপন এবং একটি ফন্ট-পরিবার ফাইল তৈরি করা জড়িত।


0

এখন সবচেয়ে সহজ সমাধান অ্যান্ড্রয়েড সমর্থিত!

এক্সএমএলে কাস্টম ফন্ট ব্যবহার করুন:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="@font/[your font resource]"/>

বিস্তারিত দেখুন:

https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html


0
  • আপনার প্রকল্পটি খুলুন এবং উপরের বাম দিকে প্রকল্প নির্বাচন করুন
  • অ্যাপ -> এসসিআর -> প্রধান
  • ডান ক্লিক করতে মূল এবং ডিরেক্টরিটি সম্পদ হিসাবে এটি তৈরি করুন
  • নতুন ডিরেক্টরি নাম এটি ফন্ট জমা এবং তৈরি করতে ডান ক্লিক করুন
  • আপনার ফ্রি ফন্টের মতো ফ্রি ফন্টগুলি সন্ধান করতে হবে
  • এটি আপনার পাঠ্যদর্শনকে দিন এবং এটি আপনার ক্রিয়াকলাপ শ্রেণিতে কল করুন
  • আপনার ফন্টগুলি ফন্ট ফোল্ডারের ভিতরে অনুলিপি করুন
  • TextView txt = (TextView) findViewById(R.id.txt_act_spalsh_welcome); Typeface font = Typeface.createFromAsset(getAssets(), "fonts/Aramis Italic.ttf"); txt.setTypeface(font);

হরফের নামটি অবশ্যই সঠিক এবং মজা করতে হবে


0

হ্যাঁ, ডাউনলোডযোগ্য ফন্টগুলি এত সহজ, যেমনটি দীপালি জানিয়েছেন।

এইভাবে আপনি এটি ...

  1. স্থান ক TextView
  2. বৈশিষ্ট্য ফলকে, fontFamilyড্রপডাউনটি নির্বাচন করুন । যদি এটি সেখানে না থাকে, তবে নীচে ক্যারেট জিনিসটি (>> এবং এটি প্রসারিত করতে ক্লিক করুন textAppearance) সন্ধান করুন।
  3. font-familyড্রপ ডাউন প্রসারিত করুন ।
  4. সামান্য তালিকায়, যতক্ষণ না দেখা পর্যন্ত সমস্ত দিকে স্ক্রোল করুন more fonts
  5. এটি একটি ডায়ালগ বাক্স খুলবে যেখানে আপনি সন্ধান করতে পারবেন Google Fonts
  6. উপরের সন্ধান বারের সাহায্যে আপনার পছন্দ মতো ফন্টটি সন্ধান করুন
  7. আপনার ফন্ট নির্বাচন করুন।
  8. আপনার পছন্দ মতো ফন্টের স্টাইলটি নির্বাচন করুন (যেমন গা bold়, সাধারণ, তির্যক ইত্যাদি)
  9. ডান ফলকে, বলার মতো রেডিও বোতামটি চয়ন করুন Add font to project
  10. ঠিক আছে ক্লিক করুন। এখন আপনার টেক্সটভিউতে আপনার পছন্দ মতো ফন্ট রয়েছে!

বোনাস: আপনি যদি নিজের অ্যাপ্লিকেশনটিতে সমস্ত কিছু বেছে বেছে বেছে বেছে বেছে বেছে বেছে নিতে চান তবে আপনার এটিকে যুক্ত <item name="android:fontfamily">@font/fontnamehere</item>করুনstyles.xml


আপনার চেয়ে আমার উত্তর প্রশংসা করা উচিত! :)
দিপালি এস।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.