我使用下面的代码强制我的textview显示带有英文数字的文本编号:
txtScale.setText("x" + String.format(Locale.ENGLISH, String.valueOf(scaleValue)));
但它无效并继续显示所选区域设置的数字。如果应用程序区域设置为阿拉伯语,则显示阿拉伯语的数字,如果设置为英语,则显示为英语,但我想强制在所有州显示英文数字。
例如,我想用阿拉伯语显示以下文字:
۱۲۳۴ //are one two three four
如:
1234
如果有帮助,我会使用以下代码手动更改应用程序的语言:
Locale locale = new Locale(CurrentLanguage);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
答案 0 :(得分:1)
不太确定你需要什么,但我想你需要这个:
txtScale.setText(String.format(Locale.ENGLISH, "x%d", scaleValue));
String.valueOf(scaleValue)
此处出现错误,您已根据默认区域设置转换了数字
答案 1 :(得分:1)
我遇到了同样的问题,解决方案是将数字变量与空字符串连接起来。 例如这样:
public void displayPoints(){
TextView scoreA = findViewById(R.id.score_id);
scoreA.setText(""+points);
}
我用了这个
scoreA.setText(""+points);
代替此
scoreA.setText(String.format("%d",points));
这甚至会警告您,硬编码文本无法正确翻译成其他语言,这正是我们在这里想要的:)。
答案 2 :(得分:1)
使用固定字体可以实现此目的,但是要将非英语数字转换为英文数字,我使用Long.parseLong("۱۰۰۰")
或Integer.parseInt("۱۰۰۰")
,输出将为1000
。
但是请注意,Double.parseDouble("۱۰۰۰")
将返回相同的内容
答案 3 :(得分:0)
问题还在于TextView的语言环境。在API级别17或之后,可以单独设置TextView的区域设置:http://developer.android.com/reference/android/widget/TextView.html#setTextLocale(java.util.Locale)
答案 4 :(得分:0)
我遇到了类似的问题,使用以下方法解决了这个问题:
public static String nFormate(double d) {
NumberFormat nf = NumberFormat.getInstance(Locale.ENGLISH);
nf.setMaximumFractionDigits(2);
String st= nf.format(d);
return st;
}
可以毫无问题地查看字符串值。