Cập nhật câu trả lời:
Android 8.0 (API cấp 26) giới thiệu một tính năng mới, Phông chữ trong XML. chỉ cần sử dụng tính năng Phông chữ trong XML trên các thiết bị chạy Android 4.1 (API cấp 16) trở lên, sử dụng Thư viện hỗ trợ 26.
xem liên kết này
Câu trả lời cũ
Có hai cách để tùy chỉnh phông chữ:
!!! phông chữ tùy chỉnh của tôi trong nội dung / phông chữ / iran_sans.ttf
Cách 1:
Kiểu chữ chuyển hướng. Lớp | || cách tốt nhất
gọi FontsOverride.setDefaultFont () trong lớp mở rộng Ứng dụng, Mã này sẽ khiến tất cả các phông chữ phần mềm bị thay đổi, thậm chí là phông chữ Toasts
AppControll.java
public class AppController extends Application {
@Override
public void onCreate() {
super.onCreate();
//Initial Font
FontsOverride.setDefaultFont(getApplicationContext(), "MONOSPACE", "fonts/iran_sans.ttf");
}
}
Phông chữOverride.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();
}
}
}
Cách 2: sử dụng setTypeface
để xem đặc biệt, chỉ cần gọi setTypeface () để thay đổi phông chữ.
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);