অ্যান্ড্রয়েড: রানটাইম নয় পুরো অ্যাপ্লিকেশনটির জন্য কাস্টম ফন্ট সেট করতে চান


100

অ্যাপ্লিকেশনটির প্রতিটি নিয়ন্ত্রণে কোনও কাস্টম ফন্ট সেট করা সম্ভব? এবং অগত্যা রানটাইম না? (যেমন সম্ভব হলে এক্সএমএল থেকে বা জাভা ফাইলে কেবল একবার আবেদনের জন্য)

আমি এই কোড থেকে একটি নিয়ন্ত্রণের জন্য ফন্ট সেট করতে পারি।

public static void setFont(TextView textView) {
    Typeface tf = Typeface.createFromAsset(textView.getContext()
            .getAssets(), "fonts/BPreplay.otf");

    textView.setTypeface(tf);

}

এবং এই কোডটিতে সমস্যাটি হ'ল এটি প্রতিটি নিয়ন্ত্রণের জন্য বলা উচিত। এবং আমি এই বা অন্য কোনও অনুরূপ পদ্ধতিটি একবার কল করতে চাইছি, অথবা সম্ভব হলে সম্পত্তিটি এক্সএমএল সেট করুন। এটা কি সম্ভব?


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

@ ভারুন: ভাল এই ধারণাটি আমার সময় বাঁচাতে পারে, তবে আমাকে প্রতিটি নিয়ন্ত্রণ সেট করতে হবে, এবং প্রত্যেকের জন্য কাস্টম নিয়ন্ত্রণ লিখতে একটি ফন্ট রানটাইম সেট করার চেয়ে দীর্ঘতর পথ হবে, আপনি কী মনে করেন? (তবে কাস্টম নিয়ন্ত্রণ লেখার জন্য +1)
প্রশাম

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

কি একটি কাস্টম লেখা সম্পর্কে VIEWপরিবর্তে একটি লেখা custom text viewএবং custom button viewআলাদাভাবে? আমার প্রয়োজনীয়তা প্রতিটি নিয়ন্ত্রণের জন্য এবং পাঠ্য দর্শনটি কেবল একটি উদাহরণ। দুঃখিত, আমি এটি উল্লেখ করতে ভুলে গেছি .. :-(
প্রশম

1
Satckoverflow প্রশ্নে একটি চেহারা আছে stackoverflow.com/questions/2711858/... আপনার সাহায্য করে।
অশ্বিনী

উত্তর:


123

সম্পাদনা করুন : সুতরাং এটি একটি সময় হয়েছে, এবং আমি মনে করি যা এটি করার সবচেয়ে ভাল উপায়, এবং এক্সএমএল মাধ্যমে কম যোগ করতে চাই!

সুতরাং প্রথমে, আপনি একটি নতুন শ্রেণি তৈরি করতে চাইছেন যা আপনি নিজেরাই অনুকূলিত করতে চান এমন দৃশ্যকে ওভাররাইড করে। (যেমন কাস্টম টাইপফেসের সাথে একটি বোতাম চান? প্রসারিত Button)। আসুন একটি উদাহরণ তৈরি করুন:

public class CustomButton extends Button {
    private final static int ROBOTO = 0;
    private final static int ROBOTO_CONDENSED = 1;

    public CustomButton(Context context) {
        super(context);
    }

    public CustomButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        parseAttributes(context, attrs); //I'll explain this method later
    }

    public CustomButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        parseAttributes(context, attrs);
    }
}

এখন, আপনার যদি না থাকে তবে এর অধীনে একটি এক্সএমএল ডকুমেন্ট res/values/attrs.xmlযুক্ত করুন এবং যুক্ত করুন:

<resources>
    <!-- Define the values for the attribute -->
    <attr name="typeface" format="enum">
        <enum name="roboto" value="0"/>
        <enum name="robotoCondensed" value="1"/>
    </attr>

    <!-- Tell Android that the class "CustomButton" can be styled, 
         and which attributes it supports -->
    <declare-styleable name="CustomButton">
        <attr name="typeface"/>
    </declare-styleable>
</resources>

ঠিক আছে, উপায় ছাড়াই, এর parseAttributes()আগে থেকে পদ্ধতিটিতে ফিরে আসা যাক :

private void parseAttributes(Context context, AttributeSet attrs) {
    TypedArray values = context.obtainStyledAttributes(attrs, R.styleable.CustomButton);

    //The value 0 is a default, but shouldn't ever be used since the attr is an enum
    int typeface = values.getInt(R.styleable.CustomButton_typeface, 0);

    switch(typeface) {
        case ROBOTO: default:
            //You can instantiate your typeface anywhere, I would suggest as a 
            //singleton somewhere to avoid unnecessary copies
            setTypeface(roboto); 
            break;
        case ROBOTO_CONDENSED:
            setTypeface(robotoCondensed);
            break;
    }

    values.recycle();
}

এখন আপনি সম্পূর্ণ প্রস্তুত। আপনি যে কোনও বিষয়ে আরও বেশি বৈশিষ্ট্য যুক্ত করতে পারেন (আপনি টাইপফেস স্টাইলের জন্য আরেকটি যুক্ত করতে পারেন - গা ,়, তির্যক ইত্যাদি) তবে এখন এটি কীভাবে ব্যবহার করবেন তা দেখুন:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res/com.yourpackage.name"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <com.yourpackage.name.CustomButton
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click Me!"
        custom:typeface="roboto" />

</LinearLayout>

xmlns:customলাইন সত্যিই কিছু হতে পারে, কিন্তু সম্মেলন কি উপরে দেখানো হচ্ছে। কী গুরুত্বপূর্ণ তা হ'ল এটি অনন্য এবং তাই প্যাকেজের নাম ব্যবহার করা হয়। এখন আপনি কেবল custom:আপনার বৈশিষ্ট্যের android:জন্য উপসর্গ এবং অ্যান্ড্রয়েড বৈশিষ্ট্যের উপসর্গ ব্যবহার করেন।

একটি শেষ জিনিস: আপনি যদি এটি কোনও স্টাইলে ( res/values/styles.xml) ব্যবহার করতে চান তবে আপনার লাইনটি যুক্ত করা উচিত নয়xmlns:custom । কোনও উপসর্গ ছাড়াই কেবল অ্যাট্রিবিটির নাম উল্লেখ করুন:

<style name="MyStyle>
    <item name="typeface">roboto</item>
</style>

                               (PREVIOUS ANSWER)

অ্যান্ড্রয়েডে একটি কাস্টম টাইপফেস ব্যবহার করা

এটি সাহায্য করা উচিত। মূলত, এক্সএমএলে এটি করার কোনও উপায় নেই, এবং যতদূর আমি বলতে পারি, কোডে এটি করার সহজ উপায় নেই। আপনার কাছে সর্বদা একটি সেটলআউটফন্ট () পদ্ধতি থাকতে পারে যা একবার টাইপফেস তৈরি করে, তারপরে প্রতিটিটির জন্য সেট টাইপফেস () চালায়। আপনি যখনই কোনও বিন্যাসে নতুন আইটেম যুক্ত করবেন তখনই আপনাকে এটি আপডেট করতে হবে। নীচের মত কিছু:

public void setLayoutFont() {
    Typeface tf = Typeface.createFromAsset(
        getBaseContext().getAssets(), "fonts/BPreplay.otf");
    TextView tv1 = (TextView)findViewById(R.id.tv1);
    tv1.setTypeface(tf);

    TextView tv2 = (TextView)findViewById(R.id.tv2);
    tv2.setTypeface(tf);

    TextView tv3 = (TextView)findViewById(R.id.tv3);
    tv3.setTypeface(tf);
}

সম্পাদনা : সুতরাং আমি নিজেই এই জাতীয় কিছু বাস্তবায়নের প্রায় কাছাকাছি এসেছি, এবং আমি কীভাবে এটি শেষ করেছিলাম এমন একটি ফাংশন তৈরি করছিলাম:

public static void setLayoutFont(Typeface tf, TextView...params) {
    for (TextView tv : params) {
        tv.setTypeface(tf);
    }
}

তারপরে, অনক্রিট () থেকে কেবল এই পদ্ধতিটি ব্যবহার করুন এবং আপনি আপডেট করতে চান এমন সমস্ত পাঠ্যদর্শনগুলি পাস করুন:

Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/BPreplay.otf");
//find views by id...
setLayoutFont(tf, tv1, tv2, tv3, tv4, tv5);

সম্পাদনা 9/5/12:

সুতরাং যেহেতু এটি এখনও মতামত এবং ভোট পাচ্ছে, তাই আমি আরও ভাল এবং আরও সম্পূর্ণ পদ্ধতি যুক্ত করতে চাই:

Typeface mFont = Typeface.createFromAsset(getAssets(), "fonts/BPreplay.otf");
ViewGroup root = (ViewGroup)findViewById(R.id.myrootlayout);
setFont(root, mFont);

/*
 * Sets the font on all TextViews in the ViewGroup. Searches
 * recursively for all inner ViewGroups as well. Just add a
 * check for any other views you want to set as well (EditText,
 * etc.)
 */
public void setFont(ViewGroup group, Typeface font) {
    int count = group.getChildCount();
    View v;
    for(int i = 0; i < count; i++) {
        v = group.getChildAt(i);
        if(v instanceof TextView || v instanceof Button /*etc.*/)
            ((TextView)v).setTypeface(font);
        else if(v instanceof ViewGroup)
            setFont((ViewGroup)v, font);
    }
}

যদি আপনি এটি আপনার বিন্যাসের মূলটি পাস করেন তবে এটি পুনরুক্তরূপে layout লেআউটের মধ্যে TextViewবা Button(বা অন্য যে কোনও বিবৃতিতে আপনি যুক্ত করেছেন) তা অনুসন্ধান করবে এবং আইডি দ্বারা নির্দিষ্ট না করে ফন্ট সেট করবে। এটি অবশ্যই ধরে নিচ্ছে আপনি প্রতিটি ভিউতে ফন্ট সেট করতে চান ।


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

1
আমি অনুমান করি যে আপনি টাইপফেসটি বার বার তৈরি করবেন না এর চেয়ে বড় কোনও পার্থক্য নেই। কেবল একটি স্ট্যাটিক টাইপফেস ব্যবহার করার বরুণের ধারণা একই কাজ করবে।
কেভিন কপোকক

1
আপনার উদাহরণ কোডের চূড়ান্ত লাইনটি লেআউটফন্ট (টিফ, টিভি 1, টিভি 2, টিভি 3, টিভি 4, টিভি 5) সেট করা উচিত; সেটটাইপফেসের পরিবর্তে (টিএফ, টিভি 1, টিভি 2, টিভি 3, টিভি 4, টিভি 5);?
কাইল Clegg

1
আপনি করা উচিত নয় ? recycleTypedArray values
CorayThan

1
গ্রেডল ব্যবহার করা হলে, কাস্টম নেমস্পেসটি হওয়া উচিতxmlns:custom="http://schemas.android.com/apk/res-auto"
জাবারি

93

এক্সএমএল এর মাধ্যমে এটি করার একটি মোটামুটি সহজ উপায় আছে। আপনাকে কেবলমাত্র নিজের নিজস্ব উইজেট তৈরি করতে হবে যা টেক্সটভিউকে প্রসারিত করবে।

প্রথমে নিম্নলিখিত বিষয়বস্তু সহ res / মান / attrs.xML এ একটি ফাইল তৈরি করুন:

<resources>
    <declare-styleable name="TypefacedTextView">
        <attr name="typeface" format="string" />
    </declare-styleable>
</resources>

এর পরে, আপনার কাস্টম উইজেটটি তৈরি করুন:

package your.package.widget;

public class TypefacedTextView extends TextView {

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

        //Typeface.createFromAsset doesn't work in the layout editor. Skipping...
        if (isInEditMode()) {
            return;
        }

        TypedArray styledAttrs = context.obtainStyledAttributes(attrs, R.styleable.TypefacedTextView);
        String fontName = styledAttrs.getString(R.styleable.TypefacedTextView_typeface);
        styledAttrs.recycle();

        if (fontName != null) {
            Typeface typeface = Typeface.createFromAsset(context.getAssets(), fontName);
            setTypeface(typeface);
        }
    }

}

আপনি দেখতে পাচ্ছেন যে উপরের কোডটি সম্পদ / ফোল্ডারের ভিতরে একটি ফন্ট পড়বে। এই উদাহরণের জন্য, আমি ধরে নিচ্ছি যে সম্পদ ফোল্ডারে "কাস্টম.টিটিএফ" নামে একটি ফাইল রয়েছে। শেষ অবধি, এক্সএমএলগুলিতে উইজেটটি ব্যবহার করুন:

<your.package.widget.TypefacedTextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:your_namespace="http://schemas.android.com/apk/res/your.package"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Custom fonts in XML are easy"
    android:textColor="#FFF"
    android:textSize="14dip"
    your_namespace:typeface="custom.ttf" />

দ্রষ্টব্য: আপনি Eclipse এর বিন্যাস সম্পাদকটিতে আপনার কাস্টম ফন্টটি দেখতে পারবেন না। এই জন্য আমি isInEditMode()চেক লাগিয়েছি। তবে আপনি যদি নিজের অ্যাপটি চালান তবে কাস্টম ফন্টটি কবজির মতো কাজ করবে।

আশা করি এটা সাহায্য করবে!


আমি এটি চেষ্টা করিনি, তবে আমি TextViewক্লাস বাড়িয়ে একটি কাস্টম নিয়ন্ত্রণ তৈরি করেছি ; typefaceএটিতে সেট করুন এবং লেআউটে কাস্টম নিয়ন্ত্রণটি ব্যবহার করুন যেমনটি আমরা সাধারণত করি এবং এটি আমার পক্ষে কাজ করে ... এটি সহজ ছিল যদিও
উপরেরটি

1
আপনি যা বলেছিলেন আমি ঠিক তাই করেছি। পার্থক্যটি হ'ল আমি এই উপাদানটি পুনরায় ব্যবহারযোগ্য করে তুলেছি, কারণ প্রশ্নটি এক্সএমএল এর মাধ্যমে কীভাবে এটি করা যায় তা জিজ্ঞাসা করে। এক্সএমএল এর মাধ্যমে এটি করার একটি উপায় আছে এবং এটি করার উপায় এটিই :)
লিওকাডিয়টাইন

সংহত করার জন্য খুব সহজ কোড। এটা আমার জন্য কাজ করে. ধন্যবাদ।
দুরাই

1
এই এক গ্রহণযোগ্য উত্তর হওয়া উচিত। সুন্দরভাবে লেখা। ধন্যবাদ!
রিয়াজ মুর্শেদ

1
আমেসোম, @ ডোমিনিকসুজ্জেজিউইচ! আপনি দয়া করে কোডটি ভাগ করে নিতে পারেন যাতে আমি উত্তরটি আপডেট করতে পারি?
লিওকাডিয়টাইন

15

রোবোটো টাইপফেস সহ টেক্সটভিউয়ের উদাহরণ:

attr.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

<declare-styleable name="RobotoTextView">
    <attr name="typeface"/>
</declare-styleable>

<attr name="typeface" format="enum">
    <enum name="roboto_thin" value="0"/>
    <enum name="roboto_thin_italic" value="1"/>
    <enum name="roboto_light" value="2"/>
    <enum name="roboto_light_italic" value="3"/>
    <enum name="roboto_regular" value="4"/>
    <enum name="roboto_italic" value="5"/>
    <enum name="roboto_medium" value="6"/>
    <enum name="roboto_medium_italic" value="7"/>
    <enum name="roboto_bold" value="8"/>
    <enum name="roboto_bold_italic" value="9"/>
    <enum name="roboto_black" value="10"/>
    <enum name="roboto_black_italic" value="11"/>
    <enum name="roboto_condensed" value="12"/>
    <enum name="roboto_condensed_italic" value="13"/>
    <enum name="roboto_condensed_bold" value="14"/>
    <enum name="roboto_condensed_bold_italic" value="15"/>
</attr>

</resources>

RobotoTextView.java:

public class RobotoTextView extends TextView {

/*
 * Permissible values ​​for the "typeface" attribute.
 */
private final static int ROBOTO_THIN = 0;
private final static int ROBOTO_THIN_ITALIC = 1;
private final static int ROBOTO_LIGHT = 2;
private final static int ROBOTO_LIGHT_ITALIC = 3;
private final static int ROBOTO_REGULAR = 4;
private final static int ROBOTO_ITALIC = 5;
private final static int ROBOTO_MEDIUM = 6;
private final static int ROBOTO_MEDIUM_ITALIC = 7;
private final static int ROBOTO_BOLD = 8;
private final static int ROBOTO_BOLD_ITALIC = 9;
private final static int ROBOTO_BLACK = 10;
private final static int ROBOTO_BLACK_ITALIC = 11;
private final static int ROBOTO_CONDENSED = 12;
private final static int ROBOTO_CONDENSED_ITALIC = 13;
private final static int ROBOTO_CONDENSED_BOLD = 14;
private final static int ROBOTO_CONDENSED_BOLD_ITALIC = 15;
/**
 * List of created typefaces for later reused.
 */
private final static SparseArray<Typeface> mTypefaces = new SparseArray<Typeface>(16);

/**
 * Simple constructor to use when creating a view from code.
 *
 * @param context The Context the view is running in, through which it can
 *                access the current theme, resources, etc.
 */
public RobotoTextView(Context context) {
    super(context);
}

/**
 * Constructor that is called when inflating a view from XML. This is called
 * when a view is being constructed from an XML file, supplying attributes
 * that were specified in the XML file. This version uses a default style of
 * 0, so the only attribute values applied are those in the Context's Theme
 * and the given AttributeSet.
 * <p/>
 * <p/>
 * The method onFinishInflate() will be called after all children have been
 * added.
 *
 * @param context The Context the view is running in, through which it can
 *                access the current theme, resources, etc.
 * @param attrs   The attributes of the XML tag that is inflating the view.
 * @see #RobotoTextView(Context, AttributeSet, int)
 */
public RobotoTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    parseAttributes(context, attrs);
}

/**
 * Perform inflation from XML and apply a class-specific base style. This
 * constructor of View allows subclasses to use their own base style when
 * they are inflating.
 *
 * @param context  The Context the view is running in, through which it can
 *                 access the current theme, resources, etc.
 * @param attrs    The attributes of the XML tag that is inflating the view.
 * @param defStyle The default style to apply to this view. If 0, no style
 *                 will be applied (beyond what is included in the theme). This may
 *                 either be an attribute resource, whose value will be retrieved
 *                 from the current theme, or an explicit style resource.
 * @see #RobotoTextView(Context, AttributeSet)
 */
public RobotoTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    parseAttributes(context, attrs);
}

/**
 * Parse the attributes.
 *
 * @param context The Context the view is running in, through which it can access the current theme, resources, etc.
 * @param attrs   The attributes of the XML tag that is inflating the view.
 */
private void parseAttributes(Context context, AttributeSet attrs) {
    TypedArray values = context.obtainStyledAttributes(attrs, R.styleable.RobotoTextView);

    int typefaceValue = values.getInt(R.styleable.RobotoTextView_typeface, 0);
    values.recycle();

    setTypeface(obtaintTypeface(context, typefaceValue));
}

/**
 * Obtain typeface.
 *
 * @param context       The Context the view is running in, through which it can
 *                      access the current theme, resources, etc.
 * @param typefaceValue values ​​for the "typeface" attribute
 * @return Roboto {@link Typeface}
 * @throws IllegalArgumentException if unknown `typeface` attribute value.
 */
private Typeface obtaintTypeface(Context context, int typefaceValue) throws IllegalArgumentException {
    Typeface typeface = mTypefaces.get(typefaceValue);
    if (typeface == null) {
        typeface = createTypeface(context, typefaceValue);
        mTypefaces.put(typefaceValue, typeface);
    }
    return typeface;
}

/**
 * Create typeface from assets.
 *
 * @param context       The Context the view is running in, through which it can
 *                      access the current theme, resources, etc.
 * @param typefaceValue values ​​for the "typeface" attribute
 * @return Roboto {@link Typeface}
 * @throws IllegalArgumentException if unknown `typeface` attribute value.
 */
private Typeface createTypeface(Context context, int typefaceValue) throws IllegalArgumentException {
    Typeface typeface;
    switch (typefaceValue) {
        case ROBOTO_THIN:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Thin.ttf");
            break;
        case ROBOTO_THIN_ITALIC:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-ThinItalic.ttf");
            break;
        case ROBOTO_LIGHT:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Light.ttf");
            break;
        case ROBOTO_LIGHT_ITALIC:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-LightItalic.ttf");
            break;
        case ROBOTO_REGULAR:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Regular.ttf");
            break;
        case ROBOTO_ITALIC:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Italic.ttf");
            break;
        case ROBOTO_MEDIUM:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Medium.ttf");
            break;
        case ROBOTO_MEDIUM_ITALIC:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-MediumItalic.ttf");
            break;
        case ROBOTO_BOLD:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Bold.ttf");
            break;
        case ROBOTO_BOLD_ITALIC:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-BoldItalic.ttf");
            break;
        case ROBOTO_BLACK:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Black.ttf");
            break;
        case ROBOTO_BLACK_ITALIC:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-BlackItalic.ttf");
            break;
        case ROBOTO_CONDENSED:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Condensed.ttf");
            break;
        case ROBOTO_CONDENSED_ITALIC:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-CondensedItalic.ttf");
            break;
        case ROBOTO_CONDENSED_BOLD:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-BoldCondensed.ttf");
            break;
        case ROBOTO_CONDENSED_BOLD_ITALIC:
            typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-BoldCondensedItalic.ttf");
            break;
        default:
            throw new IllegalArgumentException("Unknown `typeface` attribute value " + typefaceValue);
    }
    return typeface;
}

}

ব্যবহারের উদাহরণ:

<your.package.widget.RobotoTextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:typeface="roboto_thin"
                android:textSize="22sp"
                android:text="Roboto Thin"/>

সংস্থানসমূহ: রোবোটো এবং নোটো ফন্টগুলি


জাভা ক্লাসে ফন্টের আইডিগুলি ঠিক না করেই এই সমাধানটি ব্যবহার করার কোনও উপায় আছে? এনাম অ্যাটর্সদের কাছ থেকে এই চূড়ান্ত ক্ষেত্রগুলি পড়ুন .. ব্যক্তিগত চূড়ান্ত স্ট্যাটিক ইন্ট রোবোটো_থিন = 0; বেসরকারী চূড়ান্ত স্থিতিশীল int ROBOTO_THIN_ITALIC = 1; প্রাইভেট ফাইনাল স্ট্যাটিক ইন্ট রোবোটো_লাইট = 2; ...
আর্থার মেলো

3

এটি অনেক দেরি হয়ে গেছে তবে আমার এটি
কাস্টম টেক্সটভিউ তৈরির ক্ষেত্রে সহায়তা করে যা টাইপফ্রেস নামে একটি বৈশিষ্ট্যযুক্ত এবং এটি ক্যাশে ছাড়াই টাইপফেস লোডিংয়ের সাথে মেমরি ফাঁস সমস্যার সমাধান করে

প্রথম Fontsশ্রেণীর মধ্যে যা সম্পদ থেকে ফন্টগুলি এক সময়ের জন্য লোড করা হয়

 import android.content.Context;
import android.graphics.Typeface;

import java.util.Hashtable;

/**
 * Created by tonyhaddad on 7/19/15.
 */
public class Fonts {
    private Context context;

    public Fonts(Context context) {
        this.context = context;
    }
    private static Hashtable<String, Typeface> sTypeFaces = new Hashtable<String, Typeface>(
            4);
    public static Typeface getTypeFace(Context context, String fileName) {
        Typeface tempTypeface = sTypeFaces.get(fileName);

        if (tempTypeface == null) {
            String fontPath=null;
            if(fileName=="metabold")
                fontPath ="fonts/Meta-Bold.ttf";

            else if(fileName=="metanormal")
                fontPath="fonts/Meta-Normal.ttf";
            else if(fileName=="gsligh")
                fontPath="fonts/gesslight.ttf";
            else if(fileName=="bold")
                fontPath="fonts/Lato-Bold.ttf";
            else if(fileName=="rcr")
                fontPath="fonts/RobotoCondensed-Regular.ttf";

            else if(fileName=="mpr")
                fontPath="fonts/MyriadPro-Regular.otf";
            else if(fileName=="rr")
                fontPath="fonts/Roboto-Regular.ttf";

            tempTypeface = Typeface.createFromAsset(context.getAssets(), fontPath);
            sTypeFaces.put(fileName, tempTypeface);
        }

        return tempTypeface;
    }
}

তারপরে আপনার এটির যোগ করতে atrs.xML এ একটি কাস্টম বৈশিষ্ট্য যুক্ত করতে হবে

<declare-styleable name="CustomFontTextView">
        <attr name="typeFace" format="string" />

    </declare-styleable>

তারপরে কাস্টম ক্লাস

 package package_name;

/**
 * Created by tonyhaddad on 8/26/15.
 */

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.TextView;

import package_name.R;

public class CustomFontTextView extends TextView {

    String typeFace;


    public CustomFontTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        if (isInEditMode()) {
            return;
        }
        TypedArray a = context.getTheme().obtainStyledAttributes(
                attrs,
                R.styleable.CustomFontTextView,
                0, 0);
        try {
            typeFace = a.getString(0);
        } finally {
            a.recycle();
        }

        if(typeFace!=null && !typeFace.equalsIgnoreCase(""))
        {
            Typeface tf = Fonts.getTypeFace(context, typeFace);
            setTypeface(tf);
        }
        init();
    }

    public CustomFontTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        if (isInEditMode()) {
            return;
        }
        TypedArray a = context.getTheme().obtainStyledAttributes(
                attrs,
                R.styleable.CustomFontTextView,
                0, 0);
        try {
            typeFace = a.getString(0);
        } finally {
            a.recycle();
        }

        if(typeFace!=null && !typeFace.equalsIgnoreCase(""))
        {
            Typeface tf = Fonts.getTypeFace(context, typeFace);
            setTypeface(tf);
        }

        init();
    }

    public CustomFontTextView(Context context) {
        super(context);



        if(typeFace!=null && !typeFace.equalsIgnoreCase(""))
        {
            Typeface tf = Fonts.getTypeFace(context, typeFace);
            setTypeface(tf);
        }
        init();
    }


    private void init() {

    }

    public String getTypeFace() {
        return typeFace;
    }

    public void setTypeFace(String typeFace) {
        this.typeFace = typeFace;
        invalidate();
        requestLayout();
    }
}

এবং অবশেষে পাঠ্য দর্শন যোগ করুন

  <package_name.CustomFontTextView
            xmlns:custom="http://schemas.android.com/apk/res-auto/package_name"
            android:id="@+id/txt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="41dp"
            android:gravity="center_vertical"
            android:text="text"
            android:textColor="#000"
            android:textSize="23sp"
            custom:typeFace="metanormal"/>

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

শুভ কোডিং :)


সহজ স্ট্রেইট উত্তর।
eyadMhanna

2

অনক্রিট () এ ডাকা এবং আপনার বহিরাগততম ভিউ গ্রুপটি পাস করা নীচের পদ্ধতিটি গতিশীলভাবে তৈরি হওয়া পাঠ্য (যেমন গতিশীল তালিকাগুলি, সতর্কতা ইত্যাদি) এর জন্য কাজ করবে everything বহির্মুখী ভিউগ্রুপটি পাওয়ার সহজ উপায় হ'ল আপনার যে কোনও দর্শনর জন্য গেটরুটভিউ ব্যবহার করা।

public void onCreate(Bundle savedInstanceState){
    //onCreate code...
    EditText text = (EditText) findViewById(R.id.editText1);
    setTypeFaceForViewGroup((ViewGroup) text.getRootView());
}

private void setTypeFaceForViewGroup(ViewGroup vg){

    for (int i = 0; i < vg.getChildCount(); i++) {

            if (vg.getChildAt(i) instanceof ViewGroup)
                setTypeFaceForViewGroup((ViewGroup) vg.getChildAt(i));

            else if (vg.getChildAt(i) instanceof TextView)
                ((TextView) vg.getChildAt(i)).setTypeface(Typeface.createFromAsset(getAssets(), "fonts/Your_Font.ttf"));

    }

}

এটি গতিশীল বিষয়বস্তুর জন্যও কাজ করা উচিত, আপনি যা তৈরি করেছেন তার ঠিক পাশেই আপনাকে কেবল এটি কল করতে হবে (যদিও আমি এটি পরীক্ষা করি নি)।

স্মৃতি সংরক্ষণ করতে, আপনি সম্ভবত টাইপফেসটি একটি স্থিতিশীল পরিবর্তনশীল করতে চান, প্রতিবার আমার মতো লুপটি প্রতিবার লুপটি চালানোর পরিবর্তে একটি নতুন তৈরি করার চেয়ে।


আমি এই সমাধানটির প্রস্তাব দিচ্ছি না, কারণ আপনি যে প্রতিটি উপাদানটিতে এটি প্রয়োগ করতে চান তার জন্য একই ফন্টের একটি নতুন উদাহরণ তৈরি করছেন। এটি মেমরির সমস্যার কারণ হতে পারে।
flawyte

এটি আমার নোটের শেষে coveredাকা আছে।
ক্রিস

2

আপনি যদি আরও সাধারণ অগ্রগতিমূলক সমাধানের সন্ধান করেন তবে আমি একটি স্ট্যাটিক ক্লাস তৈরি করেছি যা পুরো ভিউয়ের টাইপফেস (ক্রিয়াকলাপ UI) সেট করতে ব্যবহার করা যেতে পারে। নোট করুন যে আমি মনো (সি #) এর সাথে কাজ করছি তবে আপনি জাভা ব্যবহার করে এটি সহজে প্রয়োগ করতে পারেন।

আপনি এই শ্রেণীর একটি লেআউট বা একটি নির্দিষ্ট দৃশ্য যা আপনি কাস্টমাইজ করতে চান তা পাস করতে পারেন। আপনি যদি দক্ষ হয়ে উঠতে চান তবে আপনি সিঙ্গলটন প্যাটার্ন ব্যবহার করে এটি প্রয়োগ করতে পারেন।

public static class AndroidTypefaceUtility 
{
    static AndroidTypefaceUtility()
    {
    }
    //Refer to the code block beneath this one, to see how to create a typeface.
    public static void SetTypefaceOfView(View view, Typeface customTypeface)
    {
    if (customTypeface != null && view != null)
    {
            try
            {
                if (view is TextView)
                    (view as TextView).Typeface = customTypeface;
                else if (view is Button)
                    (view as Button).Typeface = customTypeface;
                else if (view is EditText)
                    (view as EditText).Typeface = customTypeface;
                else if (view is ViewGroup)
                    SetTypefaceOfViewGroup((view as ViewGroup), customTypeface);
                else
                    Console.Error.WriteLine("AndroidTypefaceUtility: {0} is type of {1} and does not have a typeface property", view.Id, typeof(View));
                }
                catch (Exception ex)
                {
                    Console.Error.WriteLine("AndroidTypefaceUtility threw:\n{0}\n{1}", ex.GetType(), ex.StackTrace);
                    throw ex;
                }
            }
            else
            {
                Console.Error.WriteLine("AndroidTypefaceUtility: customTypeface / view parameter should not be null");
            }
        }

        public static void SetTypefaceOfViewGroup(ViewGroup layout, Typeface customTypeface)
        {
            if (customTypeface != null && layout != null)
            {
                for (int i = 0; i < layout.ChildCount; i++)
                {
                    SetTypefaceOfView(layout.GetChildAt(i), customTypeface);
                }
            }
            else
            {
                Console.Error.WriteLine("AndroidTypefaceUtility: customTypeface / layout parameter should not be null");
            }
        }

    }

আপনার ক্রিয়াকলাপে আপনাকে একটি টাইপফেস অবজেক্ট তৈরি করতে হবে। আমি আমার রিসোর্স / অ্যাসেটস / ডিরেক্টরিতে থাকা একটি .tf ফাইল ব্যবহার করে অনক্রিয়েট () এ খনি তৈরি করি। ফাইলটির 'বৈশিষ্ট্যগুলিতে অ্যান্ড্রয়েড অ্যাসেট হিসাবে চিহ্নিত হয়েছে তা নিশ্চিত করুন।

protected override void OnCreate(Bundle bundle)
{               
    ...
    LinearLayout rootLayout = (LinearLayout)FindViewById<LinearLayout>(Resource.Id.signInView_LinearLayout);
    Typeface allerTypeface = Typeface.CreateFromAsset(base.Assets,"Aller_Rg.ttf");
    AndroidTypefaceUtility.SetTypefaceOfViewGroup(rootLayout, allerTypeface);
}

2

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

এই সরঞ্জামগুলি কীভাবে প্রয়োগ করতে হয় তার একটি উদাহরণ এখানে। আপনার সমস্ত ফন্ট ফাইল রাখুন assets/fonts/। তারপরে, এই ফন্টগুলি একটি এক্সএমএল ফাইলে ঘোষণা করুন (উদাঃ res/xml/fonts.xml) এবং এই অ্যাপ্লিকেশনটির শুরুতে এই ফাইলটি লোড করুন TypefaceManager.initialize(this, R.xml.fonts);(উদাহরণস্বরূপ, আপনার অ্যাপ্লিকেশন শ্রেণির অনক্রিটে)। এক্সএমএল ফাইলটি দেখতে এমন দেখাচ্ছে:

<?xml version="1.0" encoding="utf-8"?>
<familyset>

    <!-- Some Font. Can be referenced with 'someFont' or 'aspergit' -->
    <family>
        <nameset>
            <name>aspergit</name>
            <name>someFont</name>
        </nameset>
        <fileset>
            <file>Aspergit.ttf</file>
            <file>Aspergit Bold.ttf</file>
            <file>Aspergit Italic.ttf</file>
            <file>Aspergit Bold Italic.ttf</file>
        </fileset>
    </family>

    <!-- Another Font. Can be referenced with 'anotherFont' or 'bodoni' -->
    <family>
        <nameset>
            <name>bodoni</name>
            <name>anotherFont</name>
        </nameset>
        <fileset>
            <file>BodoniFLF-Roman.ttf</file>
            <file>BodoniFLF-Bold.ttf</file>
        </fileset>
    </family>

</familyset>

com.innovattic.font.FontTextViewআপনার এক্সএমএল লেআউটে কাস্টম ইউআই উপাদান ব্যবহার করে এখন আপনি এই ফন্টগুলি আপনার শৈলীতে বা এক্সএমএল (আপনি উপরে উল্লিখিত সরঞ্জামগুলি ব্যবহার করার ক্ষেত্রে) ব্যবহার করতে পারেন । নীচে আপনি কেবলমাত্র সম্পাদনা করে আপনার সম্পূর্ণ অ্যাপ্লিকেশনটিতে সমস্ত পাঠ্যে একটি ফন্ট প্রয়োগ করতে পারেন তা নীচে আপনি দেখতে পারেন 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>

সঙ্গী সহ res/layout/layout.xml:

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

আপনার অ্যান্ড্রয়েড ম্যানিফেস্টে থিমটি প্রয়োগ করতে ভুলবেন না।


2

এর দুর্দান্ত সমাধানটিতে আমি একটি নোট যুক্ত করতে চাই leocadiotine। এটি নিখুঁত, তবে এই কাস্টম টেক্সটভিউটি ব্যবহার করার সময় অনেক সময় অ্যাপ্লিকেশনটি ধীর করে দেয়, কারণ পাঠ্যদর্শনটি তৈরি করার সময় এটিতে সম্পদ অ্যাক্সেস করতে হয়। আমি ভালো কিছু ব্যবহার করতে সুপারিশ View Holder patternমধ্যে Adapters, আমি একটি উদাহরণ লিখেছিলেন:

public class Fonts {

    private static final Map<String, Typeface> typefaces = new HashMap<String, Typeface>();

    public static Typeface getTypeface(Context ctx, String fontName) {
        Typeface typeface = typefaces.get(fontName);
        if (typeface == null) {
            typeface = Typeface.createFromAsset(ctx.getAssets(), fontName);
            typefaces.put(fontName, typeface);
        }
        return typeface;
    } 
}

এইভাবে অ্যাপ্লিকেশন সম্পদ হিসাবে কেবলমাত্র একবারে সম্পদগুলিতে অ্যাক্সেস করে এবং এটি তাদের আরও প্রয়োজনীয়তার জন্য স্মৃতিতে রাখে।


0

আমি জানি না এটি পুরো অ্যাপটি পরিবর্তন করে কিনা, তবে আমি এমন কিছু উপাদান পরিবর্তন করতে পরিচালিত করেছি যা অন্যথায় এটি করে পরিবর্তন করা যায় না:

Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/Lucida Sans Unicode.ttf");
Typeface.class.getField("DEFAULT").setAccessible(true);
Typeface.class.getField("DEFAULT_BOLD").setAccessible(true);
Typeface.class.getField("DEFAULT").set(null, tf);
Typeface.class.getField("DEFAULT_BOLD").set(null, tf);

@রিচার্ড, আমি স্থানীয় অনুসারে কাস্টম ফন্ট সেট করতে চাই, উদাহরণস্বরূপ, আমি যখনই কোরিয়ান লোকাল ব্যবহার করি তখন আমি আরিয়াল টিটিএফ সেট করতে এবং গথিক টিটিএফ সেট করতে চাই
দ্বিবেদী জি

0

আমি এই লিঙ্কটিতে ধাপে ধাপে তথ্য পেয়েছি, লিঙ্ক: https://github.com/jaydipumaretiya/CustomTypeface/

অ্যান্ড্রয়েডে টাইপফেস সঠিকভাবে ব্যবহার করার বিভিন্ন উপায় রয়েছে, আপনাকে আপনার টাইপফেস ফাইলটি সম্পদের ফোল্ডারে সরাসরি আপনার মূলের নীচে রাখতে হবে এবং এটি রান-টাইম ব্যবহার করতে পারেন।

অন্যান্য সহজ উপায় হ'ল আপনার এক্সএমএল ফাইলে টাইপফেস সেট করতে ডিফল্ট লাইব্রেরি ব্যবহার করুন। অ্যান্ড্রয়েডের টেক্সটভিউ, এডিটটেক্সট, বাটন, চেকবক্স, রেডিওবটন এবং অটো কমপ্লিটটেক্সটভিউ এবং অন্যান্য উইজেটে টাইপফেস সেট করতে আমি এই কাস্টম টাইপফেস লাইব্রেরিকে পছন্দ করেছি।


গিথুব লিঙ্কটি কাজ করছে না।
থমাস

0

অ্যান্ড্রয়েড 8.0 (এপিআই স্তর 26) এক্সএমএলে একটি নতুন বৈশিষ্ট্য প্রবর্তন করে, আপনি একটি ফন্টফ্যামিলি ফাইল তৈরি করতে পারেন এবং এটি স্টাইল.এক্সএমএলে সেট করতে পারেন।

ফন্টগুলি সংস্থান হিসাবে যুক্ত করতে, অ্যান্ড্রয়েড স্টুডিওতে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

1. রেজোল্ড ফোল্ডারে রাইট ক্লিক করুন এবং নতুন> অ্যান্ড্রয়েড রিসোর্স ডিরেক্টরিতে যান। নতুন রিসোর্স ডিরেক্টরি উইন্ডো প্রদর্শিত হবে।

২. রিসোর্স ধরণের তালিকায় ফন্ট নির্বাচন করুন এবং তারপরে ঠিক আছে ক্লিক করুন। দ্রষ্টব্য: রিসোর্স ডিরেক্টরিটির নাম অবশ্যই হরফ হতে হবে।

3. ফন্ট ফোল্ডারে আপনার ফন্ট ফাইল যুক্ত করুন।

একটি ফন্ট পরিবার তৈরি করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

1. ফন্ট ফোল্ডারে রাইট ক্লিক করুন এবং নতুন> ফন্ট রিসোর্স ফাইলে যান। নতুন রিসোর্স ফাইল উইন্ডো প্রদর্শিত হবে।

ফাইলের নামটি প্রবেশ করুন এবং তারপরে ওকে ক্লিক করুন। নতুন ফন্টের রিসোর্স এক্সএমএল সম্পাদকটিতে খোলে।

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

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
    <font
        android:fontStyle="normal"
        android:fontWeight="400"
        android:font="@font/lobster_regular" />
    <font
        android:fontStyle="italic"
        android:fontWeight="400"
        android:font="@font/lobster_italic" />
</font-family>

শৈলীতে ফন্ট যুক্ত করা হচ্ছে

স্টাইলস.এক্সএমএল খুলুন এবং আপনি অ্যাক্সেস করতে চান এমন ফন্ট ফাইলটিতে ফন্ট ফ্যামিলি অ্যাট্রিবিউট সেট করুন।

 <style name="customfontstyle" parent="@android:style/TextAppearance.Small">
    <item name="android:fontFamily">@font/lobster</item>
</style>

উত্স: এক্সএমএলে হরফ

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