我是android新手。我正在实施一个应用程序,将在两个langauge英语和乌尔都语。基本上会有一些阿拉伯语文本,其含义将基于用户选择的语言使用英语或乌尔都语。
我想改变阿拉伯语文字的字体,如果我在整个应用程序中应用字体,它也会改变乌尔都语和英语的外观。那么,只使用TypeFace将字体应用于包含阿拉伯字体的每个textview,或者有更好的方法来实现这一点,这样会好吗?
我还想知道如何删除自定义字体,以便通过代码再次获取默认字体。对不起,如果这个问题很幼稚,我只想知道有什么可能做到这一点。
答案 0 :(得分:1)
例如,如果您希望您的应用程序同时支持英语
和阿拉伯字符串(除了默认字符串),
你可以简单地再创建两个
名为/res/values-en
的资源目录(对于英文strings.xml)和
/res/values-ar
(对于Arabic strings.xml)。
在strings.xml
个文件中,
资源名称是相同的。
例如,/res/values-en/strings.xml
文件可以
看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello in English!</string>
</resources>
而/res/values-ar/strings.xml文件看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">مرحبا في اللغة الإنجليزية</string>
</resources>
另外,/ res / values-ur_IN / strings.xml文件对于urdu看起来像这样:
ur_IN for india ur_PK for pakisthan
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">انگریزی میں خوش!!</string>
</resources>
/ res / layout目录中显示字符串的默认布局文件是指 变量名@ string / hello的字符串,不考虑哪种语言或目录 字符串资源在。
Android操作系统决定使用哪个版本 在运行时加载的字符串(法语,英语或默认值)。具有TextView控件的布局 显示字符串可能如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/hello" >
</LinearLayout>
以正常方式以编程方式访问字符串:
String str = getString(R.string.hello);
要改变你需要改变语言的语言..
btn_english.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, getResources().getString(R.string.lbl_langSelectEnglis), Toast.LENGTH_SHORT).show();
}
});
btn_arbice.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Locale locale = new Locale("ar");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, getResources().getString(R.string.lbl_langSelecURdu), Toast.LENGTH_SHORT).show();
}
});
btn_urdu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Locale locale = new Locale("ur_IN");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(HomeActivity.this, getResources().getString(R.string.lbl_langSelectEnglis), Toast.LENGTH_SHORT).show();
}
});
另见单屏幕示例
Custom fonts for TextView based on languages inside String
String paragraph =“hey what up upضعيف”; int NO_FLAG = 0; Bidi bidi = new Bidi(段落,NO_FLAG); int runCount = bidi.getRunCount(); for(int i = 0; i&lt; runCount; i ++){ String ltrtl = bidi.getRunLevel(i)%2 == 0? “ltr”:“rtl”; String subString = paragraph.substring(bidi.getRunStart(i),bidi.getRunLimit(i)); Log.d(“&gt;&gt; bidi:”+ i,subString +“是”+ ltrtl“; }
打印:
嘿,是什么,是ltr
ضعيف是rtl
所以现在可以根据语言方向轻松构建TypefaceSpan
或MetricAffectingSpan
:
SpannableString spanString = new SpannableString(paragraph);
for (int i = 0; i < runCount; i++) {
Object span = bidi.getRunLevel(i) % 2 == 0 ? ltrFontSpan : rtlFontSpan;
spanString.setSpan(span, bidi.getRunStart(i), bidi.getRunLimit(i), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
textView.setText(spanString);