خانه اندروید

800 ساعت آموزش اختصاصی

بیش از 30 هزار دانشجو

آموزش های پروژه محور

مطالب پیشنهادی حتما مشاهده کنید :

انتخاب فونت پویا از طریق xml اندروید استودیو

انتخاب فونت پویا از طریق xml اندروید استودیو

انتخاب فونت پویا از طریق xml اندروید استودیو

Dynamic Font Selection via XML

فونت پویا از طریق xml ، عرض سلام و احترام خدمت همراهان همیشگی سایت خانه اندروید در این پست قصد داریم آموزش ایجاد کردن فونت دلخواه و سپس انتخاب اون فونت از طریق فایل xml رو خدمتون آموزش بدیم اگر به تصویر پست کمی با دقت نگاه کنیم متوجه این موضوع خواهیم شد .پس بی مقدمه میرم سراغ آموزش انتخاب کردن فونت دلخواه از طریق xml رو خدمتون آموزش میدیم.

حتما بخوانید : فونت سفارشی اندروید استودیو Extending TextView

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

لطفا دقت کنید قصد داریم برای Textview فونت اختصاصی تعریف کنیم و از طریق بخش xml اکتیویتی مقدار رو برای اون Textview ست کنیم.

package com.homeandroid.app.makanjo.Packfonts_Customs;

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

import com.homeandroid.app.makanjo.R;

/**
 * Created by homeandroid.ir on 7/21/2017.
 */

public class CustomTextviewfontiransans extends TextView {

    public CustomTextviewfontiransans(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        fontsset(attrs);
    }

    public CustomTextviewfontiransans(Context context) {
        super(context);
        fontsset(null);
    }

    public CustomTextviewfontiransans(Context context, AttributeSet attrs) {
        super(context, attrs);
        fontsset(attrs);
    }

    public CustomTextviewfontiransans(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        fontsset(attrs);
    }

    private void fontsset(AttributeSet attrs) {
        if (attrs!=null){
            TypedArray attributes=getContext().obtainStyledAttributes(attrs, R.styleable.CustomTextviewfontiransans);

            try {
                int font=attributes.getInteger(R.styleable.CustomTextviewfontiransans_font, cashfonts.iransans);
                switch (font){
                    case cashfonts.iransans:
                        setTypeface(cashfonts.getIranianSans(getContext()));
                        break;

                    case cashfonts.iransanlight:
                        setTypeface(cashfonts.getIranianSansLight(getContext()));
                        break;

                    case cashfonts.iransanabold:
                        setTypeface(cashfonts.getIranianSansBold(getContext()));
                        break;
                }
            }
            finally {
                invalidate();
                requestLayout();
                attributes.recycle();
            }
        }
    }
}

خوب برای اینکه از پوشه assets فونت های دلخواهی که اضافه کرده ایم رو ازشون استفاده کنیم نیاز داریم تا معرفی کنیم.و هم چنین دقت کنید چون از پوشه assets ، خواندن عملیات زمان بری هستش پس باید یک کلاسی ایجاد کنیم که فونت های ما رو کش کنه و توی دفعات بعدی از متغییرهای کش شده استفاده کنیم. پس کلاس زیر به خاطر همین موضوع ایجاد شده هست.

package com.homeandroid.app.makanjo.Packfonts_Customs;

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

/**
 * Created by homeandroid.ir on 7/21/2017.
 */
public class cashfonts {


    private static Typeface iranianSans;
    private static Typeface iranianSansLight;
    private static Typeface iranianSansBold;

    public static final int iransans=0;
    public static final int iransanlight=1;
    public static final int iransanabold=2;


    public static Typeface getIranianSansLight(Context context){
        if (iranianSansLight==null){
            iranianSansLight= Typeface.createFromAsset(context.getAssets(),"iranian_sans_light.ttf");
        }
        return iranianSansLight;
    }

    public static Typeface getIranianSansBold(Context context){
        if (iranianSansBold==null){
            iranianSansBold= Typeface.createFromAsset(context.getAssets(),"iranian_sans_bold.ttf");
        }
        return iranianSansBold;
    }

    public static Typeface getIranianSans(Context context){
        if (iranianSans==null){
            iranianSans= Typeface.createFromAsset(context.getAssets(),"iranian_sans.ttf");
        }
        return iranianSans;
    }



}

دقت کنید باید در پوشه values فایل xml به نام fonts ایجاد کنیم. و سپس مقدار های زیر را ست کنیم.

نکته : من سه تا فونت به پوشه assets اضافه کرده ام که فونت های  من iransans هستن و به ترتیب نمایش فونت Normal و light و bold هستن و موقع فراخوانی در بخش xml همین موارد را ست می کنیم به عنوان مثال 

app:font=bold

و حال می توانیم Textview های خودمون رو به صورت اختصاصی در بخش دیزاین فونت دلخواهی که دوست داریم رو اختصاص بدیم کافی نام پکیج نیم و سپس کلاس را فرخوانی کنیم.

<com.homeandroid.app.makanjo.Packfonts_Customs.CustomTextviewfontiransans
    android:id="@+id/Textview_username"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toEndOf="@+id/imguser"
    android:maxLines="1"
    app:font="bold"
    android:textSize="15sp" />

 

اگر مشکلی داشتید می توانید سورس کد را دانلود کنید.

دانلود سورس کد حجم ۱٫۹۱ KB

پسورد فایل : homeandroid.ir

موفق باشین. 

منبع آموزش : خانه اندروید

درباره نویسنده

جواد محمدی هستم بنیان‌گذار سایت خانه اندروید در خدمتون هستیم با آموزش و مفاهیم برنامه نویسی اندروید-نزدیک به 10 سال هست در حوزه برنامه نویسی فعالیت می کنم. مسلط به kotlin,java,flutter,php هستم . در خانه اندروید دانستی های خودم را در اختیار تمامی علاقمندان به برنامه نویسی قرار میدم.تشکر از اینکه خانه اندرورید رو دنبال می کنید.

قبل از ارسال دیدگاه

  • قبل از ارسال دیدگاه: لطفا دیدگاه خودتون رو فقط در مورد این مطلب بنویسید.سپاسگزارم.

    دیدگاه های طولانی نادیده گرفته می شوند لذا دیدگاه خودتان را در دو خط خلاصه کنید.

    دیدگاه های که شامل توهین یا متن توهین آمیز اصلا تایید نمی شود.

    به دیدگاه های بی نام و نشان که ایمیل فیک و نام فیک وارد می کنند پاسخ داده نمی شود

8 دیدگاه

  1. فرید مقدم گفت:

    باسلام
    عذرمیخوام بهتر نبود که بجای این همه کار از fontfamily استفاده میکردیم؟؟

    • Admin گفت:

      سلام و احترام
      دقت بفرمایین این آموزش قدیمی هست و الان fontfamily تدریس شده قبلا توی کانال تلگرام در دسترس هست.
      با احترام.

  2. نیما گفت:

    سلام وقت بخیر آقا برنامه من چندتا تب داره که هر تب عنوان هایی داره که روش کلیک میکنیم وارد توضیحاتش میشه، بعد یک منوی کشویی دارم که داخلش گزینه تنظیمات داره تو صفحه جاوای تنظیمات حالا میخوام با انتخاب هر RadioButton اون توضیحاتم فونتشون تغییر کنن،اگه نیاز به SharePreferences دارم کجا اعمالش کنم با چه کدی؟تو صفحه تنظیمات تغییر فونت تغییر میکنه اما توضیحاتو نمیدونم چجوری تغییر کنه

    • Admin گفت:

      سلام خدمت شما دوست عزیز نیما
      قبل از ثبت دیدگاه قسمت قوانین ارسال دیدگاه را مطالعه کنید. و سوال شما اصلاح واضح نیست.
      لطفا سوال خودتون رو در مورد این مطلب بنویسین و از دیدگاه غیر مرتبط خود داری کنید. موفق باشین.

  3. باقر برغمدی گفت:

    سلام
    قسمت فرخوانی فونت در xml جدا واقعا کاربردیه
    زحمت کشیدین
    موفق باشید..

  4. نازنین حاتمی گفت:

    سلام بی نظیره سایتون