টেক্সটভিউতে ফন্টটি কীভাবে পরিবর্তন করবেন?


289

TextViewডিফল্ট হিসাবে এটিতে আরিয়াল হিসাবে প্রদর্শিত হবে কীভাবে একটিতে ফন্টটি পরিবর্তন করবেন ? এটিকে কীভাবে পরিবর্তন করবেন Helvetica?


1
আমি মনে করি এটি একটি পুনরাবৃত্তি প্রশ্ন। এখানে উত্তর দেখুন stackoverflow.com/questions/2878882/android-develop-lcd-font/...
the100rabh

তোমার জন্য আমার লিংক সহায়ক হতে পারে stackoverflow.com/questions/2376250/...
duggu

উত্তর:


342

প্রথমত, ডিফল্টটি আড়িয়াল নয়। ডিফল্ট হ'ল ড্রয়েড সানস।

দ্বিতীয়ত, একটি ভিন্ন অন্তর্নির্মিত ফন্টে পরিবর্তন করতে, android:typefaceXML বিন্যাসে বা setTypeface()জাভাতে ব্যবহার করুন।

তৃতীয়ত, অ্যান্ড্রয়েডে হেলভেটিকা ​​ফন্ট নেই। অন্তর্নির্মিত পছন্দগুলি হ'ল ড্রয়েড সানস ( sans), ড্রড সানস মনো ( monospace) এবং ড্রড সেরিফ ( serif)। আপনি যখন নিজের অ্যাপ্লিকেশনটির সাথে নিজের ফন্টগুলি বান্ডিল করতে পারেন এবং সেগুলি ব্যবহার করতে পারেন তবে setTypeface()মনে রাখবেন যে ফন্ট ফাইলগুলি বড় এবং কিছু ক্ষেত্রে লাইসেন্স চুক্তিগুলির প্রয়োজন (যেমন, হেলভেটিকা, একটি লিনোটাইপ ফন্ট )।

সম্পাদনা

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

বর্তমান টেক্সটভিউ ফ্রেমওয়ার্কটি প্রতিটি ওজনের জন্য একটি তির্যক স্টাইল সহ পাতলা, হালকা, নিয়মিত এবং সাহসী ওজনে রোবোটো সরবরাহ করে। ফ্রেমওয়ার্কটি প্রতিটি ওজনের জন্য তির্যক শৈলীর পাশাপাশি নিয়মিত এবং সাহসী ওজনে রোবোটো কনডেন্সযুক্ত বৈকল্পিকও সরবরাহ করে।

আইসিএসের পরে, অ্যান্ড্রয়েডে রোবোটো ফন্টের স্টাইল অন্তর্ভুক্ত রয়েছে, আরও পড়ুন রোবোটো

সম্পাদনা 2

সাপোর্ট লাইব্রেরি 26 এর আবির্ভাবের সাথে অ্যান্ড্রয়েড এখন কাস্টম ফন্টগুলি ডিফল্টরূপে সমর্থন করে। আপনি রেস / ফন্টগুলিতে নতুন ফন্টগুলি সন্নিবেশ করতে পারেন যা এক্সএমএল বা প্রোগ্রামগতভাবে পৃথকভাবে টেক্সটভিউতে সেট করা যেতে পারে। পুরো আবেদন ডিফল্ট হরফ এছাড়াও সংজ্ঞা দ্বারা পরিবর্তন করা যাবে এটা styles.xml Android বিকাশকারী ডকুমেন্টেশন এই একটি স্পষ্ট নির্দেশিকা হয়েছে এখানে


6
এক্সএমএলে ফন্ট সেট করার কোনও উপায় নেই? কেন?
জনি

5
@ জনি আপনি আসলে পারেন আপনি এমন একটি শ্রেণী তৈরি করছেন যা পাঠ্যদর্শনকে প্রসারিত করে এবং কনস্ট্রাক্টর থেকে সেট টাইপফেস কল করে।
ফিলিপ

এক্সএমএল লেআউটে এটি কীভাবে করবেন?
এম উসমান খান

2
@ ইউসমান: আপনার ক্যালিগ্রাফির মতো একটি তৃতীয় পক্ষের গ্রন্থাগারটি দরকার: github.com/chrisjenx/Calligraphy
CommonsWare

জাভা কোড ব্যবহার করে টাইপফেস সেট করা একাধিক লাইনের কারণে শক্ত, আমি কাস্টম ফন্টগুলি সেট করতে একটি লাইব্রেরি তৈরি করেছি। আপনি এই উত্তরে একটি লাইব্রেরির ব্যবহার পেতে পারেন stackoverflow.com/a/42001474/4446392
চথুরা জয়নাথ

254

প্রথমে .ttfআপনার প্রয়োজনীয় ফন্টের ফাইলটি ডাউনলোড করুন ( arial.ttf)। এটি assets ফোল্ডারে রাখুন । (সম্পদের ফোল্ডারের অভ্যন্তরে নতুন ফোল্ডার নামক ফন্ট তৈরি করুন এবং এটির ভিতরে রাখুন)) ফন্টটি প্রয়োগ করতে নিম্নলিখিত কোডটি ব্যবহার করুন TextView:

Typeface type = Typeface.createFromAsset(getAssets(),"fonts/arial.ttf"); 
textView.setTypeface(type);

প্রিয় ময়ূর, এই .ttf ফাইলগুলি কোথায় পাবেন সে সম্পর্কে কোনও প্রস্তাবনা?
একাকীকরণকারী

3
প্রিয় @ লোনলেয়ারার আপনি 1001freefouts.com এ বিনামূল্যে ফন্ট ( .ttf ) ফাইলগুলি ডাউনলোড করতে পারেন বা কেবল "ফ্রি ফন্ট" গুগল করতে পারেন
ymerdrengene

10
যারা অ্যান্ড্রয়েড স্টুডিও ব্যবহার করছেন এবং কোনও "সম্পদ" ফোল্ডারটি খুঁজে পাচ্ছেন না, তাদের এই প্রশ্নটি দেখুন । সংক্ষিপ্ত উত্তর: src/main/assets/fonts/
অ্যাডামডপোর্ট


33

আপনি স্ট্যাটিক ক্লাস তৈরি করতে চাইতে পারেন যাতে সমস্ত ফন্ট থাকবে। এইভাবে, আপনি একাধিক বার হরফ তৈরি করবেন না যা পারফরম্যান্সে খারাপ প্রভাব ফেলতে পারে । কেবলমাত্র নিশ্চিত করুন যে আপনি " সম্পদ " ফোল্ডারের অধীনে " ফন্ট " নামে একটি সাব-ফোল্ডার তৈরি করেছেন ।

এর মতো কিছু করুন:

public class CustomFontsLoader {

public static final int FONT_NAME_1 =   0;
public static final int FONT_NAME_2 =   1;
public static final int FONT_NAME_3 =   2;

private static final int NUM_OF_CUSTOM_FONTS = 3;

private static boolean fontsLoaded = false;

private static Typeface[] fonts = new Typeface[3];

private static String[] fontPath = {
    "fonts/FONT_NAME_1.ttf",
    "fonts/FONT_NAME_2.ttf",
    "fonts/FONT_NAME_3.ttf"
};


/**
 * Returns a loaded custom font based on it's identifier. 
 * 
 * @param context - the current context
 * @param fontIdentifier = the identifier of the requested font
 * 
 * @return Typeface object of the requested font.
 */
public static Typeface getTypeface(Context context, int fontIdentifier) {
    if (!fontsLoaded) {
        loadFonts(context);
    }
    return fonts[fontIdentifier];
}


private static void loadFonts(Context context) {
    for (int i = 0; i < NUM_OF_CUSTOM_FONTS; i++) {
        fonts[i] = Typeface.createFromAsset(context.getAssets(), fontPath[i]);
    }
    fontsLoaded = true;

}
}

এইভাবে, আপনি আপনার অ্যাপ্লিকেশনটির যে কোনও জায়গা থেকে ফন্টটি পেতে পারেন।


1
চরম দোস্ত! এটি ওওপির সৌন্দর্য। মহান কাজ! :)
জোশুয়া মাইকেল ওয়েগনার

আমি এই ক্লাসটি কীভাবে ব্যবহার করব?
জ্যাক

আপনাকে এই প্রকল্পটি আপনার প্রকল্পে স্থাপন করতে হবে, এটি আপনার ফন্টের সাথে খাপ খাইয়ে নিতে হবে এবং তারপরে আপনার অ্যাপ্লিকেশানের যে কোনও জায়গা থেকে getTypeface (..) স্থির পদ্ধতিটি ব্যবহার করতে হবে।
ড্যানিয়েল এল।

আমি অনুরূপ সমাধান ব্যবহার করেছি, তবে পারফরম্যান্স উন্নত করতে ক্যাচিং যুক্ত করেছি .... যে কোনও ক্ষেত্রে, আপনি এমন কোনও পরিস্থিতির মুখোমুখি হয়েছিলেন যেখানে ফন্ট কিছু ফোনে কাজ করে এবং অন্যদের মধ্যে না?
আরজেফারেস

20

সেরা অনুশীলন

TextViewPlus.java:

public class TextViewPlus extends TextView {
    private static final String TAG = "TextView";

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

    public TextViewPlus(Context context, AttributeSet attrs) {
        super(context, attrs);
        setCustomFont(context, attrs);
    }

    public TextViewPlus(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setCustomFont(context, attrs);
    }

    private void setCustomFont(Context ctx, AttributeSet attrs) {
        TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.TextViewPlus);
        String customFont = a.getString(R.styleable.TextViewPlus_customFont);
        setCustomFont(ctx, customFont);
        a.recycle();
    }

    public boolean setCustomFont(Context ctx, String asset) {
        Typeface typeface = null;
        try {
            typeface = Typeface.createFromAsset(ctx.getAssets(), asset);
        } catch (Exception e) {
            Log.e(TAG, "Unable to load typeface: "+e.getMessage());
            return false;
        }

        setTypeface(typeface);
        return true;
    }
}

attrs.xML: ( রেস / মান কোথায় রাখবেন )

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

ব্যবহারবিধি:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:foo="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <com.mypackage.TextViewPlus
        android:id="@+id/textViewPlus1"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:text="@string/showingOffTheNewTypeface"
        foo:customFont="my_font_name_regular.otf">
    </com.mypackage.TextViewPlus>
</LinearLayout>

আশা করি এটা তোমাকে সাহায্য করবে।


1
পাঠ্য ভিউ সাবক্লাসিং কেন সেরা অনুশীলন?
স্টিলথ রাব্বি

@ স্টিলথ রাব্বি, এখানে আমরা কেবলমাত্র এক্সএমএল দ্বারা কাস্টম ফন্টটি পাস করতে পারি, প্রতিটি পাঠ্যদর্শনের জন্য বিশেষ জাভা কোড লেখার দরকার নেই।
হিরেন প্যাটেল

তার জন্য গ্রন্থাগার রয়েছে। সম্পদ ফোল্ডারের নীচে কেবল আপনার ফন্ট যুক্ত করুন এবং এটি এক্সএমএলে ঘোষণা করুন। github.com/febaisi/
কাস্টম

আপনার লাইব্রেরিটি দেখতে দুর্দান্ত দেখাচ্ছে, তবে একমাত্র সমস্যাটি হ'ল এটি অ্যান্ড্রয়েড 21+ এর জন্য
loloof64

@febaisi যেমনটি আমি আপনার লিব উদাহরণে দেখেছি, উদাহরণস্বরূপ Raw.githubusercontent.com/febaisi/ কাস্টমটেক্সটভিউ
মাস্টার /

17

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


1
আপনার মন্তব্য অপ্রয়োজনীয়। উপরের ব্যাখ্যাটি আপনি যা বলেছেন ঠিক তা বলেছেন এবং আরও ...
জোশুয়া মাইকেল ওয়াগনার

14

হরফ তৈরির একীকরণের অন্য উপায় ...

public class Font {
  public static final Font  PROXIMA_NOVA    = new Font("ProximaNovaRegular.otf");
  public static final Font  FRANKLIN_GOTHIC = new Font("FranklinGothicURWBoo.ttf");
  private final String      assetName;
  private volatile Typeface typeface;

  private Font(String assetName) {
    this.assetName = assetName;
  }

  public void apply(Context context, TextView textView) {
    if (typeface == null) {
      synchronized (this) {
        if (typeface == null) {
          typeface = Typeface.createFromAsset(context.getAssets(), assetName);
        }
      }
    }
    textView.setTypeface(typeface);
  }
}

এবং তারপরে আপনার ক্রিয়াকলাপে ব্যবহার করতে ...

myTextView = (TextView) findViewById(R.id.myTextView);
Font.PROXIMA_NOVA.apply(this, myTextView);

মনে মনে, অস্থির ক্ষেত্রের সাথে এই ডাবল-চেকড লকিং আইডিয়ামটি জাভা 1.5++ এ ব্যবহৃত মেমরি মডেলের সাথে সঠিকভাবে কাজ করে।


এই উত্তরটিতে কেন কেবল 1 টি আপভোট এবং উপরের উত্তরটির 15 টি রয়েছে? অন্যটিকে কী আরও ভাল করে তোলে? আমার কাছে মনে হচ্ছে এটি একক সিঙ্গলটন নীতিটি ব্যবহার করে আরও সোজা-ফরোয়ার্ড ...?
কোইন ডেমনি

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

অবশ্যই বেসরকারী নির্মাণকারী হতে হবে। ভাল দাগ :) সম্পাদনা করবে!
ক্রিস আইচিসন

12

সর্বোত্তম অনুশীলন হ'ল 26.0.0 বা তদূর্ধের Android সাপোর্ট লাইব্রেরি সংস্করণ ব্যবহার করা।

পদক্ষেপ 1: ফন্ট ফাইল যুক্ত করুন

  1. ইন মাঝামাঝি ফোল্ডারের নতুন তৈরি ফন্ট রিসোর্স অভিধান
  2. ফন্ট ফাইল যোগ করুন ( .ttf , .orf )

উদাহরণস্বরূপ, যখন ফন্ট ফাইল হেলভেটিকা_নিউ.টিটিএফ হবে যা আর.ফন্ট.হেলভিটিকা_নিউ উত্পাদন করে

পদক্ষেপ 2: ফন্ট পরিবার তৈরি করুন

  1. ইন ফন্ট ফোল্ডারের নতুন রিসোর্স ফাইল যোগ
  2. উপাদানটিতে প্রতিটি ফন্ট ফাইল, শৈলী এবং ওজন বৈশিষ্ট্য সংযুক্ত করুন।

উদাহরণ স্বরূপ:

<?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/helvetica_neue" />
</font-family>

পদক্ষেপ 3: এটি ব্যবহার করুন

এক্সএমএল লেআউটে:

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

অথবা শৈলীতে হরফ যুক্ত করুন:

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

আরও উদাহরণের জন্য আপনি ডকুমেন্টেশন অনুসরণ করতে পারেন:

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


7

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

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

public enum FontLoader {

ARIAL("arial"),
TIMES("times"),
VERDANA("verdana"),
TREBUCHET("trbuchet"),
GEORGIA("georgia"),
GENEVA("geneva"),
SANS("sans"),
COURIER("courier"),
TAHOMA("tahoma"),
LUCIDA("lucida");   


private final String name;
private Typeface typeFace;


private FontLoader(final String name) {
    this.name = name;

    typeFace=null;  
}

public static Typeface getTypeFace(Context context,String name){
    try {
        FontLoader item=FontLoader.valueOf(name.toUpperCase(Locale.getDefault()));
        if(item.typeFace==null){                
            item.typeFace=Typeface.createFromAsset(context.getAssets(), "fonts/"+item.name+".ttf");                 
        }           
        return item.typeFace;
    } catch (Exception e) {         
        return null;
    }                   
}
public static Typeface getTypeFace(Context context,int id){
    FontLoader myArray[]= FontLoader.values();
    if(!(id<myArray.length)){           
        return null;
    } 
    try {
        if(myArray[id].typeFace==null){     
            myArray[id].typeFace=Typeface.createFromAsset(context.getAssets(), "fonts/"+myArray[id].name+".ttf");                       
        }       
        return myArray[id].typeFace;    
    }catch (Exception e) {          
        return null;
    }   

}

public static Typeface getTypeFaceByName(Context context,String name){      
    for(FontLoader item: FontLoader.values()){              
        if(name.equalsIgnoreCase(item.name)){
            if(item.typeFace==null){
                try{
                    item.typeFace=Typeface.createFromAsset(context.getAssets(), "fonts/"+item.name+".ttf");     
                }catch (Exception e) {          
                    return null;
                }   
            }
            return item.typeFace;
        }               
    }
    return null;
}   

public static void loadAllFonts(Context context){       
    for(FontLoader item: FontLoader.values()){              
        if(item.typeFace==null){
            try{
                item.typeFace=Typeface.createFromAsset(context.getAssets(), "fonts/"+item.name+".ttf");     
            }catch (Exception e) {
                item.typeFace=null;
            }   
        }                
    }       
}   
}

তারপরে আপনার পাঠ্যদর্শনটিতে কেবল এই কোডটি ব্যবহার করুন:

 Typeface typeFace=FontLoader.getTypeFace(context,"arial");  
 if(typeFace!=null) myTextView.setTypeface(typeFace);

5

অবশেষে আমি এটির একটি খুব সহজ সমাধান পেয়েছি।

  1. অ্যাপ্লিকেশন স্তরের গ্রেডে এই সমর্থন লাইব্রেরিগুলি ব্যবহার করুন ,

    compile 'com.android.support:appcompat-v7:26.0.2'
    compile 'com.android.support:support-v4:26.0.2'
  2. তারপরে রেজ ফোল্ডারের ভিতরে "ফন্ট" নামে একটি ডিরেক্টরি তৈরি করুন

  3. সেই ফন্ট ডিরেক্টরিতে ফন্ট (টিটিএফ) ফাইল রাখুন, নামকরণের কনভেনশনগুলি মনে রাখবেন [ইগনেমে কোনও বিশেষ অক্ষর, কোনও বড় অক্ষর এবং কোনও স্থান বা ট্যাব থাকা উচিত নয়]
  4. এর পরে, xML থেকে এই ফন্টটি উল্লেখ করুন

            <Button
            android:id="@+id/btn_choose_employee"
            android:layout_width="140dp"
            android:layout_height="40dp"
            android:layout_centerInParent="true"
            android:background="@drawable/rounded_red_btn"
            android:onClick="btnEmployeeClickedAction"
            android:text="@string/searching_jobs"
            android:textAllCaps="false"
            android:textColor="@color/white"
            android:fontFamily="@font/times_new_roman_test"
            />

এই উদাহরণস্বরূপ, times_new_roman_test হ'ল ফন্ট ডিরেক্টরি থেকে একটি ফন্ট টিটিএফ ফাইল


4
import java.lang.ref.WeakReference;
import java.util.HashMap;

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

public class FontsManager {

    private static FontsManager instance;

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

    private static Context context;

    private FontsManager(final Context ctx) {
        if (context == null) {
            context = ctx;
        }
    }

    public static FontsManager getInstance(final Context appContext) {
        if (instance == null) {
            instance = new FontsManager(appContext);
        }
        return instance;
    }

    public static FontsManager getInstance() {
        if (instance == null) {
            throw new RuntimeException(
                    "Call getInstance(Context context) at least once to init the singleton properly");
        }
        return instance;
    }

    public Typeface getFont(final String assetName) {
        final WeakReference<Typeface> tfReference = typefaces.get(assetName);
        if (tfReference == null || tfReference.get() == null) {
            final Typeface tf = Typeface.createFromAsset(context.getResources().getAssets(),
                    assetName);
            typefaces.put(assetName, new WeakReference<Typeface>(tf));
            return tf;
        }
        return tfReference.get();
    }

}

এইভাবে, আপনি এমন একটি ভিউ তৈরি করতে পারেন যা টেক্সটভিউ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় এবং এর নির্মাণকারীকে সেট টাইপফেস কল করে।


1
হ্যালো, টাইপফিস অবজেক্টটি ধরে রাখতে কেন WeakReferences ব্যবহার করছেন?
অলস

3

যখন আপনার ফন্টটি ভিতরে সঞ্চিত থাকে res/asset/fonts/Helvetica.ttfতখন নিম্নলিখিতটি ব্যবহার করুন:

Typeface tf = Typeface.createFromAsset(getAssets(),"fonts/Helvetica.ttf"); 
txt.setTypeface(tf);

অথবা, যদি আপনার ফন্টের ফাইলটি ভিতরে থাকে res/font/helvetica.ttfতবে নিম্নলিখিত ব্যবহার করুন:

Typeface tf = ResourcesCompat.getFont(this,R.font.helvetica);
txt.setTypeface(tf);

2
ধন্যবাদ, আপনি যে অংশটি রেজো ফোল্ডারে রেখেছিলেন তা সন্ধান করছিলেন!
মিক্কেল লারসেন

2

সম্পদ থেকে ফন্ট পান এবং সমস্ত শিশুকে সেট করুন

public static void overrideFonts(final Context context, final View v) {
    try {
        if (v instanceof ViewGroup) {
            ViewGroup vg = (ViewGroup) v;
            for (int i = 0; i < vg.getChildCount(); i++) {
                View child = vg.getChildAt(i);
                overrideFonts(context, child);
         }
        } else if (v instanceof TextView ) {
            ((TextView) v).setTypeface(Typeface.createFromAsset(context.getAssets(),"DroidNaskh.ttf"));// "BKOODB.TTF"));
        }
    } catch (Exception e) {
 }
 } 

2
  1. ফন্টটেক্সটভিউ.জভা ক্লাস যুক্ত করুন:


public class FontTextView extends TextView {
    String fonts[] = {"HelveticaNeue.ttf", "HelveticaNeueLight.ttf", "motschcc.ttf", "symbol.ttf"};

    public FontTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(attrs);
    }

    public FontTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        if (!isInEditMode()) {
            init(attrs);
        }

    }

    public FontTextView(Context context) {
        super(context);
        if (!isInEditMode()) {
            init(null);
        }
    }

    private void init(AttributeSet attrs) {
        if (attrs != null) {
            TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.FontTextView);
            if (a.getString(R.styleable.FontTextView_font_type) != null) {
                String fontName = fonts[Integer.valueOf(a.getString(R.styleable.FontTextView_font_type))];

                if (fontName != null) {
                    Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "font/" + fontName);
                    setTypeface(myTypeface);
                }
                a.recycle();
            }
        }
    }
}


  1. সম্পদ লাইব্রেরি ফন্ট যোগ করুন
    এখানে চিত্র বর্ণনা লিখুন


  1. Attrs.xML এ যোগ করুন, সংখ্যাগুলি অ্যারে শ্রেণিতে ক্রমে হওয়া উচিত।

    <declare-styleable name="FontTextView">
    <attr name="font_type" format="enum">
        <enum name="HelveticaNeue" value="0"/>
        <enum name="HelveticaNeueLight" value="1"/>
        <enum name="motschcc" value="2"/>
        <enum name="symbol" value="3"/>
    </attr>


  1. তালিকা থেকে একটি ফন্ট নির্বাচন করুন
    এখানে চিত্র বর্ণনা লিখুন

মেইনএ্যাকটিভিটিতে আপনার এই ক্লাসটি ইনস্ট্যান্ট করার দরকার আছে? কারণ এটি আমার জন্য কিছু পরিবর্তন করছে না।
টোবিয়াস মেয়ার

1

অ্যান্ড্রয়েড বেশ কয়েকটি ভিন্ন ওজন (নিয়মিত, হালকা, হালকা, পাতলা, ঘনীভূত) সহ রবোটো ফন্ট ব্যবহার করে, যা উচ্চ ঘনত্বের স্ক্রিনে দুর্দান্ত দেখায়।

রোবোটো ফন্টগুলি পরীক্ষা করতে নীচের লিঙ্কটি দেখুন:

এক্সএমএল লেআউটে রবোটো কীভাবে ব্যবহার করবেন

আপনার প্রশ্নে ফিরে যান, আপনি যদি নিজের অ্যাপ্লিকেশনটিতে টেক্সটভিউ / বোতামের জন্য ফন্টটি পরিবর্তন করতে চান তবে রোবোটো-হালকা ফন্ট ব্যবহার করতে আপনার স্টাইলস.এক্সএমএল এর নীচে কোড যুক্ত করার চেষ্টা করুন :

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    ......
    <item name="android:buttonStyle">@style/MyButton</item>
    <item name="android:textViewStyle">@style/MyTextView</item>
</style>

<style name="MyButton" parent="@style/Widget.AppCompat.Button">
    <item name="android:textAllCaps">false</item>
    <item name="android:fontFamily">sans-serif-light</item>
</style>

<style name="MyTextView" parent="@style/TextAppearance.AppCompat">
    <item name="android:fontFamily">sans-serif-light</item>
</style>

এবং আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলে 'অ্যাপ থিম' ব্যবহার করতে ভুলবেন না

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    ......
</application>

0

কিছুটা সহজ সরল কিছু:

public class Fonts {
  public static HashSet<String,Typeface> fonts = new HashSet<>();

  public static Typeface get(Context context, String file) {
    if (! fonts.contains(file)) {
      synchronized (this) {
        Typeface typeface = Typeface.createFromAsset(context.getAssets(), name);
        fonts.put(name, typeface);
      }
    }
    return fonts.get(file);
  }
}

// Usage
Typeface myFont = Fonts.get("arial.ttf");

(দ্রষ্টব্য এই কোডটি অনির্ধারিত, তবে সাধারণভাবে এই পদ্ধতিরটি ভালভাবে কাজ করা উচিত))

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