如何为所有设备支持阿拉伯文字体?

时间:2015-08-10 10:35:37

标签: android fonts typeface android-typeface

我创建一个包含阿拉伯语文本的Android应用程序活动,并在此文本上设置字体,如

 Typeface tf= Typeface.createFromAsset(getAssets(), "trado.ttf");
 textView.setTypeface(tf);

但这个字体不支持所有的deveice。在Samsun S4上它的工作是正确的,但在三星盛大它不起作用。

三星galaxy s4的屏幕截图,正确显示阿拉伯语文本

enter image description here

Samsung grand的屏幕截图,无法正确显示阿拉伯语文本

enter image description here

我附上两个屏幕截图请检查并告诉我, 我如何处理这个问题。

2 个答案:

答案 0 :(得分:0)

您应该缓存TypeFace,否则you might risk memory leaks on older handsets。缓存也会提高速度,因为从资源中读取数据不是非常快。

public class FontCache {

    private static Hashtable<String, Typeface> fontCache = new Hashtable<String, Typeface>();

    public static Typeface get(String name, Context context) {
        Typeface tf = fontCache.get(name);
        if(tf == null) {
            try {
                tf = Typeface.createFromAsset(context.getAssets(), name);
            }
            catch (Exception e) {
                return null;
            }
            fontCache.put(name, tf);
        }
        return tf;
    }
}

我在how to load custom fonts and style textviews上给出了一个完整的例子作为类似问题的答案。您似乎正在做大部分工作,但您应该按照上面的建议缓存字体。

Calligraphy以非常特定的顺序查找字体,大多数情况下它与Android框架解析属性的方式非常相似。

使用CalligraphyConfig在#onCreate()方法的Application类中定义默认字体。

@Override
public void onCreate() {
    super.onCreate();
    CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
                            .setDefaultFontPath("fonts/Roboto-RobotoRegular.ttf")
                            .setFontAttrId(R.attr.fontPath)
                            .build()
            );
    //....
}

最初我建议尝试第一种方法,如果你遇到问题,那就去第二种方法(第三方库)

希望这会有所帮助

答案 1 :(得分:0)

我认为创建价值 - 阿拉伯语 - &gt; strings.xml 并在此处写下您的文字。这将是帮助