2014-09-18 90 views
0

我正在研究Android應用程序,並且對如何在Android上更改默認字體毫無頭緒。我不想根據系統來更改字體。字體必須在整個系統中進行更改。提前致謝。以編程方式更改Android系統字體

+0

您可能正在尋找這:http://stackoverflow.com/questions/2711858/is-it-possible-to-set-a-custom-font-for-entire-of-application – Astyan 2017-03-03 15:38:14

回答

0

,你可以把你的自定義字體在assets/fonts

它NEDS與.ttf擴展 結束,比

Typeface tf = Typeface.createFromAsset(getContext().getAssets(), 
     "fonts/yourFont.ttf"); 
    setTypeface(tf); 
0

創建資產/字體

enter image description here

示例代碼:

number_text = (TextView)findViewById(R.id.hour_progress_number); 
    number_text.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/roboto-thin.ttf")); 

    minute_text = (TextView)findViewById(R.id.minute_progress_number); 
    minute_text.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/roboto-thin.ttf")); 
+1

答案是,你不可以做這個。應用程序無權訪問系統的該部分(沒有,如您所說,沒有root訪問權限)。 – kcoppock 2014-09-18 20:54:18

+1

你確定嗎? – 2014-09-19 02:49:22

1

setTypeface()唯一的問題是,如果你想要它的應用程序廣泛,你必須利用它與每個視圖。這或者意味着大量冗餘代碼或者編寫自定義視圖類來設置通貨膨脹字體。或者你可以使用一個輔助類中的這兩個可愛的小方法,通過反射來設置應用程序的字體:

public static void setDefaultFont(Context context, String staticTypefaceFieldName, String fontAssetName) { 
    final Typeface regular = Typeface.createFromAsset(context.getAssets(), fontAssetName); 
    replaceFont(staticTypefaceFieldName, regular); 
} 

protected 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(); 
    } 
} 

然後設置字體這樣做MyHelperClass.setDefaultFont(this, "DEFAULT", "fonts/FONT_NAME.ttf");

,將設置默認字體爲您的應用程序到您的FONT_NAME.ttf字體文件。

相關問題