9
我開發了一個android自定義鍵盤。我需要更改使用unicode實際打印的輸出文本的字體樣式。我可以更改Android自定義鍵盤的輸出字體嗎?
如何在不改變設備的默認字體的情況下,將鍵盤的文本輸出的字體樣式更改爲整個設備的字體樣式?
字體也不在Android設備中,所以我們必須從正在開發鍵盤的同一應用程序向外部提供字體。
我開發了一個android自定義鍵盤。我需要更改使用unicode實際打印的輸出文本的字體樣式。我可以更改Android自定義鍵盤的輸出字體嗎?
如何在不改變設備的默認字體的情況下,將鍵盤的文本輸出的字體樣式更改爲整個設備的字體樣式?
字體也不在Android設備中,所以我們必須從正在開發鍵盤的同一應用程序向外部提供字體。
更改應用程序內部的字體樣式。
創建一個名爲
FontOverride
import java.lang.reflect.Field;
import android.content.Context;
import android.graphics.Typeface;
public final class FontsOverride {
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();
}
}
}
現在創建另一個類重寫名爲
應用程序的字體的簡單類
public final class Application extends android.app.Application {
@Override
public void onCreate() {
super.onCreate();
FontsOverride.setDefaultFont(this, "DEFAULT", "fonts/GeezEdit.ttf");
FontsOverride.setDefaultFont(this, "MONOSPACE", "fonts/GeezEdit.ttf");
/*FontsOverride.setDefaultFont(this, "MONOSPACE", "MyFontAsset2.ttf");
FontsOverride.setDefaultFont(this, "SERIF", "MyFontAsset3.ttf");
FontsOverride.setDefaultFont(this, "SANS_SERIF", "MyFontAsset4.ttf");*/
}
}
現在
在值文件夾
<item name="android:typeface">monospace</item>
在Android清單文件,這個字體添加到Android的風格文件的風格,最後提到的應用程序名稱中的應用標籤
android:name=".Application"
這將致力於改變用戶向android項目或應用程序提供字體。
這個答案正在工作,但我需要改變應用程序外的字體。 –