رفتن به مطلب

محمد معین عبدی

ارسال های توصیه شده

سلام خدمت دوستان عزیز با یک آموزش دیگه در خدمتتون هستم...

خب در این روش من برای عوض کردن فونت ایتم های navigation drawer خودم استفاده میکنم که برای شما هم به اشتراک میذارم....

نمونه : 

photo_2017-09-12_11-40-27.thumb.jpg.4715dfc531ee085ea327b363330be46d.jpg

خب ابتدا در اندروید استدیو یک پروژه بسازید سپس فولدر assets رو بهش اضافه کنید و فونت خودتون رو اونجا بریزید...

دو کلاس جاوا به اسم های زیر تشکیل بدید :

customTypefaceSpan.java

FontTypeface.java

و کدهای زیر رو برای هر کلاس قرار بدید :

import android.content.res.Resources;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.style.TypefaceSpan;
import android.util.TypedValue;

/**
 * Created by moein on 02/03/2017.
 */

public class customTypefaceSpan extends TypefaceSpan {
    private final Typeface newType;
    private final int newSize;
    public customTypefaceSpan(String family , Typeface type,int size) {
        super(family);
        newType = type;
        newSize = size;
    }
    @Override
    public void updateDrawState(TextPaint ds) {
        applyCustomTypeFace(ds, newType, newSize);
    }

    @Override
    public void updateMeasureState(TextPaint paint) {
        applyCustomTypeFace(paint, newType, newSize);
    }

    private static void applyCustomTypeFace(Paint paint, Typeface tf, int size) {

        try {
            int oldStyle;
            Typeface old = paint.getTypeface();
            if (old == null) {
                oldStyle = 0;
            } else {
                oldStyle = old.getStyle();
            }

            int fake = oldStyle & ~tf.getStyle();
            if ((fake & Typeface.BOLD) != 0) {
                paint.setFakeBoldText(true);
            }

            if ((fake & Typeface.ITALIC) != 0) {
                paint.setTextSkewX(-0.25f);
            }

            paint.setTextSize(getPixelsFromDip(size));
            paint.setTypeface(tf);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static float getPixelsFromDip(float dip) {
        return TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_DIP, dip,
                Resources.getSystem().getDisplayMetrics()
        );
    }
}
public class FontTypeface {
    private Context context;

    public FontTypeface(Context context){
        this.context = context;
    }

    public Typeface getTypefaceAndroid(){
        Typeface typeFace = Typeface.createFromAsset(context.getAssets(),"font.ttf");
        return typeFace;
    }
}

خب حالا به اکتیوتی که navigation drawer در اون قرار داره برید و یک void تشکیل بدید و به اندازه ایتم هایی که دارید بهش ایتم اضافه کنید :

private void changeTypeface(NavigationView navigationView){
        FontTypeface fontTypeface = new FontTypeface(this);
        Typeface typeface = fontTypeface.getTypefaceAndroid();

        MenuItem item1;
        MenuItem item2;
        MenuItem item3;
        MenuItem item4;
        MenuItem item5;
        MenuItem item6;
        MenuItem item7;
        item1 = navigationView.getMenu().findItem(R.id.nav_surveying);
        item1.setTitle("برداشت نقاط");
        applyFontToItem(item1, typeface);

        item2 = navigationView.getMenu().findItem(R.id.nav_convertCo);
        item2.setTitle("تبدیل مختصات");
        applyFontToItem(item2, typeface);

        item3 = navigationView.getMenu().findItem(R.id.nav_destination);
        item3.setTitle("اندازه گیری فاصله");
        applyFontToItem(item3, typeface);

        item7 = navigationView.getMenu().findItem(R.id.nav_area);
        item7.setTitle("محاسبه مساحت");
        applyFontToItem(item7, typeface);

        item4 = navigationView.getMenu().findItem(R.id.nav_map);
        item4.setTitle("نقشه های گوگل");
        applyFontToItem(item4, typeface);

        item5 = navigationView.getMenu().findItem(R.id.nav_compass);
        item5.setTitle("قطب نما");
        applyFontToItem(item5, typeface);

        item6 = navigationView.getMenu().findItem(R.id.nav_about);
        item6.setTitle("درباره");
        applyFontToItem(item6, typeface);
    }

در اینجا من 6 آیتم دارم و اگر بیشتر یا کمتر بود اون رو کم وزیاد کنید

قدم بعدی ایجاد یک void دیگه هست به صورت زیر : 

private void applyFontToItem(MenuItem item, Typeface font) {
        SpannableString mNewTitle = new SpannableString(item.getTitle());
        mNewTitle.setSpan(new customTypefaceSpan("", font, 14), 0 ,
                mNewTitle.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        item.setTitle(mNewTitle);
    }

و در آخر در بخش onCreate اون رو فراخوانی کنید:

changeTypeface(navigationView);

ببخشید اگه نتونستم خوب موضوع رو انتقال بدم :ا 

 

موفق باشید...

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...