强制textview显示只有英文数字的数字

时间:2015-09-13 05:20:21

标签: android textview locale

我使用下面的代码强制我的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());

5 个答案:

答案 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;
}

可以毫无问题地查看字符串值。