Android XML替代字体

时间:2018-01-16 15:26:03

标签: android xml android-layout fonts

我有一个使用两个语言的android应用程序(取决于用户的手机语言)使用值-ar ... 无论如何,我有一个textview显示一些文本,它会根据手机语言而改变

好吧,我想为那个textview设置两种字体,如果手机语言是英语,另一种是电话语言是阿拉伯语的话。

我已经能够将一部手机设置为该textview,但我不知道如何设置替代字体,就像我们在CSS中所做的那样“font-family:Arial,”Helvetica Neue“,Helvetica,sans-serif ;”如果未能为文本设置Arial字体,将应用“Helvetica”字体

总结一下,我有一个文本视图,它的值是语言根据手机语言的变化,我想为每个值设置一个独特的字体

1 个答案:

答案 0 :(得分:0)

我认为最简单的方法是制作自己的自定义 TextView 。只需将字体复制到assets文件夹,然后通过调用 setFont1 setFont2 在字体之间切换。

更新 该视图将自动将自动字体更改为您的手机语言。我将其设置为检测英语/阿拉伯语,但您可以更改它,甚至添加更多语言。你可以找到two-letter language codes here

public class MultiFaceTextView extends TextView {

    private static Typeface typeface1,typeface2;

    public MultiFaceTextView(Context context) {
        super(context);
        initialise(context);
    }

    public MultiFaceTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        initialise(context);
    }

    public MultiFaceTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initialise(context);
    }


    private void initialise(Context context){
        if (typeface1==null) typeface1=Typeface.createFromAsset(context.getAssets(), "font1.ttf");
        if (typeface2==null) typeface2=Typeface.createFromAsset(context.getAssets(), "font2.ttf");
        changeTypeface(Locale.getDefault().getLanguage());
    }

    private void changeTypeface(String lang){
        switch (lang){
            case "en":this.setTypeface(typeface1);break;// English
            case "ar":this.setTypeface(typeface2);break;// Arabic
        }
    }

    public void setFont1(){changeTypeface("en");} 

    public void setFont2(){changeTypeface("ar");} 

}