android decimalformat for arabic,symbol在数字的右侧

时间:2014-10-24 15:50:51

标签: android right-to-left decimalformat

我试图支持RTL左手语言,我正在用阿拉伯语进行测试(我对此一无所知)。

负数/正数符号应该位于数字的右侧还是左侧?我认为它应该在左侧,但是当我使用Android的DecimalFormat将数字放入设备设置的语言环境时,符号出现在右侧..

有没有人遇到这个,知道如何解决它?我能想到的最好是用括号打印出来,如果它是否定的,应该解决这个问题但不理想。

修改

对不起,代码总是有帮助的。如果我打印下面(经度是负数):

DecimalFormat coord_df = new DecimalFormat("#.000000");
coord_df.format(loc.getLongitude())

它打印得像这样

##,######-

其中#符号是阿拉伯语中的数字(如此处东阿拉伯语行中显示的那些:http://en.wikipedia.org/wiki/Eastern_Arabic_numerals

我需要在数字的正确一侧得到否定(我相信这是左派)

我最后只是检查设备是否处于RTL状态,只要我需要显示数字,如答案:android determine if device is in right to left language/layout

如果设备是RTL,那么我使用带负号的负子模式作为后缀,如下所示:

"#.000000,#.000000-"

3 个答案:

答案 0 :(得分:1)

只需分享另一种方法,您可以在文字视图中将文字方向设置为从左到右,它会正确显示负号。

textView.setTextDirection(TextView.TEXT_DIRECTION_LTR);

答案 1 :(得分:0)

我不知道你的代码是什么,但我得到了代码-1,111,11:

        DecimalFormat df2 = new DecimalFormat( "#,###,###.###" );
        Double dd=-1111.11;
        String res=df2.format(dd);
        ((EditText)findViewById(R.id.editText1)).setText(res);

答案 2 :(得分:0)

您可以通过string.xml中设置的特定模式处理此问题,将符号(减号)与数字的绝对值分开:

在string.xml(标准值)

<string name="number_pattern">%1$s%2$.0f</string>

在string.xml(阿拉伯语值)

<string name="number_pattern">%2$.0f%1$s</string>

在java程序中,传递值参数(绝对值和符号),如下所示:

double numberAbs = (number< 0 ? -number: number);
String symbol = (number < 0 ? "-" : "");
return String.format(new Locale("en", "US"), getContext().getString(R.string.number_pattern), symbol, numberAbs);