2015-12-17 77 views
9

我開發了一個android自定義鍵盤。我需要更改使用unicode實際打印的輸出文本的字體樣式。我可以更改Android自定義鍵盤的輸出字體嗎?

如何在不改變設備的默認字體的情況下,將鍵盤的文本輸出的字體樣式更改爲整個設備的字體樣式?

字體也不在Android設備中,所以我們必須從正在開發鍵盤的同一應用程序向外部提供字體。

回答

4

更改應用程序內部的字體樣式。

創建一個名爲

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項目或應用程序提供字體。

+1

這個答案正在工作,但我需要改變應用程序外的字體。 –