Java me 在JavaMe中,我如何更改显示内容的方向,使其从右向左移动,只用于我的MIDlet?

Java me 在JavaMe中,我如何更改显示内容的方向,使其从右向左移动,只用于我的MIDlet?,java-me,locale,nokia,midlet,right-to-left,Java Me,Locale,Nokia,Midlet,Right To Left,My Java ME MIDlet允许其用户更改MIDlet的语言。 我的代码处理国际化,对于从左到右的语言来说效果很好。 但当用户将语言更改为从右向左语言时,将显示正确的字符串,但屏幕仍保持左对齐 换句话说,手机的区域设置是en_US,我不想更改它。 我只想更改MIDlet的区域设置。 动态更改MIDlet的所有屏幕以正确显示其内容的最简单方法是什么? 我不介意解决方案是否涉及让用户重新启动应用程序。 如果没有Java ME解决方案,我也不介意该解决方案是否为诺基亚手机专有。假设您使用的是LC

My Java ME MIDlet允许其用户更改MIDlet的语言。
我的代码处理国际化,对于从左到右的语言来说效果很好。
但当用户将语言更改为从右向左语言时,将显示正确的字符串,但屏幕仍保持左对齐

换句话说,手机的区域设置是en_US,我不想更改它。
我只想更改MIDlet的区域设置。
动态更改MIDlet的所有屏幕以正确显示其内容的最简单方法是什么?
我不介意解决方案是否涉及让用户重新启动应用程序。

如果没有Java ME解决方案,我也不介意该解决方案是否为诺基亚手机专有。

假设您使用的是LCDUI,默认情况下,
StringItems
等将根据手机的区域设置提供默认布局。i、 e.
Item.layou DEFAULT
,这意味着具有
en\u US
区域设置的手机将从左到右显示项目,而具有
ar\u EG
区域设置的手机将从右到左显示文本

但是,可以使用
setLayout()
功能强制版面右对齐文本:

StringItem myStringItem  = new StringItem("Title", "The text I want to display", Item.PLAIN);
myStringItem.setLayout(Item.LAYOUT_RIGHT);
append(myStringItem );
您可以轻松创建一个singleton
Settings
类,该类可以保存一个带有用于对齐的值的标志(
Item.LAYOUT\u LEFT
Item.LAYOUT\u RIGHT
),并在设置布局时调用它,例如:

myStringItem.setLayout(Settings.getInstance().getJustification());
如果您愿意,这也可以在构造函数中完成

对于低级的
图形
可以使用
drawString()
方法并更改文本的方向,但是您需要从文本的右上角而不是左上角计算起点

  if (Settings.getInstance().getJustification() != Item.LAYOUT_RIGHT ) {
       g.drawString("Some Text", x + TEXT_MARGIN , y ,Graphics.TOP | Graphics.LEFT);
  } else {
       // Arabic rendering of menu items - getWidth() is the maximum length
       // of the line 
       g.drawString("Some Arabic Text",  x + getWidth() - TEXT_MARGIN, y ,
                            Graphics.TOP | Graphics.RIGHT);
  }
最简单的解决方案(您已经拒绝了)是在整个过程中使用
Item.layou DEFAULT
,并更改手机的区域设置(当然),但是如果您使用低级图形,您仍然需要对
drawString()
使用覆盖

要检查正确的对齐方式,我将使用
System.getProperty(“microedition.locale”)
将输入区域设置输入如下函数:

 static final String[] RIGHT_TO_LEFT = {
        "ar", // Arabic
        "az", // Azerbaijani
        "he", // Hebrew
        "jv", // Javanese
        "ks", // Kashmiri
        "ml", // Malayalam
        "ms", // Malay
        "pa", // Panjabi
        "fa", // Persian
        "ps", // Pushto
        "sd", // Sindhi
        "so", // Somali
        "tk", // Turkmen
        "ug", // Uighur
        "ur", // Urdu
        "yi" // Yiddish
    };

 public static int getJustification(String locale) {

        for (int index = 0; index < RIGHT_TO_LEFT.length; index++) {
            if (locale.indexOf(RIGHT_TO_LEFT[index]) != -1) {
                return Item.LAYOUT_RIGHT;
            }
        }
        return Item.LAYOUT_DEFAULT;
    }
静态最终字符串[]从右到左={
“ar”,//阿拉伯语
“az”//阿塞拜疆
“他”//希伯来语
“jv”,//爪哇语
“ks”//克什米尔
“ml”//Malayalam
“ms”,//马来语
“pa”,//旁遮普省
“fa”//波斯语
“ps”//Pushto
“sd”//Sindhi
“所以”//somalian
“tk”//Turkmen
“ug”,//维吾尔语
“ur”,//乌尔都语
“彝语”//意第绪语
};
公共静态整型整定(字符串区域设置){
for(int index=0;index
侧注。如果目标设备支持移动i18napi,那么可能还有其他选项