Java me 在JavaMe中,我如何更改显示内容的方向,使其从右向左移动,只用于我的MIDlet?
My Java ME MIDlet允许其用户更改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
我的代码处理国际化,对于从左到右的语言来说效果很好。
但当用户将语言更改为从右向左语言时,将显示正确的字符串,但屏幕仍保持左对齐 换句话说,手机的区域设置是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 );
您可以轻松创建一个singletonSettings
类,该类可以保存一个带有用于对齐的值的标志(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,那么可能还有其他选项