Android ICS - 强制使用DroidSans作为serif字体

时间:2012-06-07 11:57:18

标签: android android-layout fonts

有人知道如何强制在Android应用程序中使用DroidSans字体作为sans字体而不是Roboto吗?

显然,Roboto字体中存在一个错误,它无法正确显示重音符号,如下例所示: люди

使用serif字体(似乎仍然是DroidSerif字体)正确显示(在ю上重音),但没有使用sans字体(在ю之后重音)!

新的sans字体似乎是Roboto,我想使用DroidSans代替,它正确显示事物。

解决这个问题的任何简单解决方案?

提前多多感谢,

塞巴斯蒂安

1 个答案:

答案 0 :(得分:0)

我认为您必须手动将DroidSans.ttf添加到项目中,然后将其设置为您的文本字段。

将DroidSans.ttf放在项目的assets文件夹中。使用它来适用于所有TextView(这个例子是你有粗体字的时候):

public static void setDroidSans(final ViewGroup view,final  Context context){

    Typeface droidFont=Typeface.createFromAsset(context.getAssets(),  "fonts/DroidSans.ttf");
    Typeface droidFontBold=Typeface.createFromAsset(context.getAssets(),  "fonts/DroidSansBold.ttf");
    for (int i = 0; i < view.getChildCount(); i++) {
        checkForTextview(view.getChildAt(i),droidFont,droidFontBold);
    }   

}

private static void checkForTextview(View view, Typeface typeface, Typeface typefaceBold){
    if(view instanceof ViewGroup){
        ViewGroup v=(ViewGroup) view;
        for (int i = 0; i < v.getChildCount(); i++) {
            checkForTextview(v.getChildAt(i),typeface,typefaceBold);
        }
    }
    else if(view instanceof TextView){
        if(((TextView)view).getTypeface() == Typeface.DEFAULT_BOLD)
            ((TextView)view).setTypeface(typefaceBold);
        else 
            ((TextView)view).setTypeface(typeface);
    }

}  

使用它的例子:

ViewGroup myRootView= (ViewGroup)findViewById(R.id.rootView);
setDroidSans(myRootView, getApplicationContext())