آموزش اضافه کردن فونت به theme برنامه(کامل)
سلام دوستان
من خودم خیلی دنبال راه حلی بودم که یکبار فونت رو تعریف کنم و هروقت هرجا خواسم استفاده کنم.
واسه اینکار اومدم یه style اختصاصی ساختم.حالا بستگی داره شما بخواین یه فونت به کل theme برنامتون اضاف کنید یا اینکه یه style بسازین بعد به هر شی که دوست داشتین این style رو بدین
خب واسه اینکار راه حل های زیادی وجود داره اما یکی از بهترین و راحتترین راه حل ها override کردن یکی از فونت های اندروید هس که من فونت SERIF رو انتخاب کردم
خب اول از همه یک کلاس میسازیم به اسم TypefaceUtil
import android.content.Context;
import android.graphics.Typeface;
import android.util.Log;
import java.lang.reflect.Field;
public class TypefaceUtil {
/**
* Using reflection to override default typeface
* NOTICE: DO NOT FORGET TO SET TYPEFACE FOR APP THEME AS DEFAULT TYPEFACE WHICH WILL BE OVERRIDDEN
* @param context to work with assets
* @param defaultFontNameToOverride for example "monospace"
* @param customFontFileNameInAssets file name of the font from assets
*/
public static void overrideFont(Context context, String defaultFontNameToOverride, String customFontFileNameInAssets) {
try {
final Typeface customFontTypeface = Typeface.createFromAsset(context.getAssets(), customFontFileNameInAssets);
final Field defaultFontTypefaceField = Typeface.class.getDeclaredField(defaultFontNameToOverride);
defaultFontTypefaceField.setAccessible(true);
defaultFontTypefaceField.set(null, customFontTypeface);
} catch (Exception e) {
Log.e("Can not set custom font " + customFontFileNameInAssets + " instead of " + defaultFontNameToOverride);
}
}
}
خب حالا این کلاس رو داخل کلاس معروف G فراخوانی میکنیم که به محض اجرای برنامه اجرا بشه
public class G extends Application {
@Override
public void onCreate() {
TypefaceUtil.overrideFont(getApplicationContext(), "SERIF", "آدرس فونت");
// font from assets: "assets/fonts/Roboto-Regular.ttf
}
}
حالا خیلی راحت یه فایل xml داخل values میسازیم به طور مثال theme.xml
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
//مثال1
<style name="myTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowAnimationStyle">@style/myThemeAnimation</item>
</style>
//مثال2
<style name="textStyle" parent="@android:style/TextAppearance">
<item name="android:textSize">20sp</item>
<item name="android:typeface">serif</item>
</style>
</resources>
حالا خیلی راحت میتونیم مثلا theme برنامه رو همونی بزاریم که الان ساختیم
نگاه به کد قسمت Manifest بکنید.....من theme برنامه رو عوض کردم
<application
android:name="com.uncocoder.course.app.animatable_list_view.G"
android:icon="@drawable/ic_launcher"
android:theme="@style/myTheme" //این قسمت
حالا شاید دلتون خواست که theme برنامه رو عوض نکنید چون اگه عوض کنید کل برنامه بصورت پیش فرض فونت انتخابی شما میشه
شاید دلتون خواست مثلا فقط یک TextView از فونت شما ارث بری کنه(داخل xml)
به مثال زیر توجه کنید
<TextView
style="@style/textStyle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="سجاد زهره ای" />
//به خط اول کد توجه کنید
سوالی داشتید من درخدمتم
موفق باشید
سلام. من هرکاری میکنم این جواب نمیده. همش ارور میده که Can not set custom font assets/homa instead of serif
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .