อัปเดตคำตอบ:
Android 8.0 (API ระดับ 26) แนะนำคุณลักษณะใหม่แบบอักษรใน XML เพียงใช้ฟีเจอร์แบบอักษรใน XML บนอุปกรณ์ที่ใช้ Android 4.1 (API ระดับ 16) และสูงกว่าให้ใช้ไลบรารีการสนับสนุน 26
เห็นลิงค์นี้
คำตอบเก่า
มีสองวิธีในการปรับแต่งแบบอักษร:
!!! แบบอักษรที่กำหนดเองของฉันใน asset / fonts / iran_sans.ttf
วิธีที่ 1: การ
แก้ไข Typeface.class ||| วิธีที่ดีที่สุด
โทร FontsOverride.setDefaultFont () ในชั้นเรียนขยายแอพลิเคชัน, รหัสนี้จะทำให้แบบอักษรซอฟต์แวร์ทั้งหมดจะมีการเปลี่ยนแปลงแม้กระทั่งแบบอักษร Toasts
AppController.java
public class AppController extends Application {
@Override
public void onCreate() {
super.onCreate();
//Initial Font
FontsOverride.setDefaultFont(getApplicationContext(), "MONOSPACE", "fonts/iran_sans.ttf");
}
}
FontsOverride.java
public class FontsOverride {
public static void setDefaultFont(Context context, String staticTypefaceFieldName, String fontAssetName) {
final Typeface regular = Typeface.createFromAsset(context.getAssets(), fontAssetName);
replaceFont(staticTypefaceFieldName, regular);
}
private static void replaceFont(String staticTypefaceFieldName, final Typeface newTypeface) {
try {
final Field staticField = Typeface.class.getDeclaredField(staticTypefaceFieldName);
staticField.setAccessible(true);
staticField.set(null, newTypeface);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
วิธีที่ 2:ใช้ setTypeface
สำหรับมุมมองพิเศษเพียงเรียก setTypeface () เพื่อเปลี่ยนแบบอักษร
CTextView.java
public class CTextView extends TextView {
public CTextView(Context context) {
super(context);
init(context,null);
}
public CTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context,attrs);
}
public CTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context,attrs);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public CTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context,attrs);
}
public void init(Context context, @Nullable AttributeSet attrs) {
if (isInEditMode())
return;
// use setTypeface for change font this view
setTypeface(FontUtils.getTypeface("fonts/iran_sans.ttf"));
}
}
FontUtils.java
public class FontUtils {
private static Hashtable<String, Typeface> fontCache = new Hashtable<>();
public static Typeface getTypeface(String fontName) {
Typeface tf = fontCache.get(fontName);
if (tf == null) {
try {
tf = Typeface.createFromAsset(AppController.getInstance().getApplicationContext().getAssets(), fontName);
} catch (Exception e) {
e.printStackTrace();
return null;
}
fontCache.put(fontName, tf);
}
return tf;
}
}
myTextView.setTypeface(myTypeface);