我创建一个包含阿拉伯语文本的Android应用程序活动,并在此文本上设置字体,如
Typeface tf= Typeface.createFromAsset(getAssets(), "trado.ttf");
textView.setTypeface(tf);
但这个字体不支持所有的deveice。在Samsun S4上它的工作是正确的,但在三星盛大它不起作用。
三星galaxy s4的屏幕截图,正确显示阿拉伯语文本
Samsung grand的屏幕截图,无法正确显示阿拉伯语文本
我附上两个屏幕截图请检查并告诉我, 我如何处理这个问题。
答案 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 并在此处写下您的文字。这将是帮助