Предполагая, что вы используете LCDUI, по умолчанию StringItems
и т. д. будет задан макет по умолчанию в зависимости от языкового стандарта телефона. то есть Item.LAYOUT_DEFAULT
, это означает, что телефон с локалью en_US
будет отображать элементы слева направо, тогда как телефон с локалью ar_EG
будет отображать тексты справа налево.
Однако можно принудительно выровнять текст по правому краю с помощью функции setLayout()
:
StringItem myStringItem = new StringItem("Title", "The text I want to display", Item.PLAIN);
myStringItem.setLayout(Item.LAYOUT_RIGHT);
append(myStringItem );
Вы можете легко создать одноэлементный класс Settings
, который мог бы содержать флаг со значением, используемым для обоснования ( Item.LAYOUT_LEFT
или Item.LAYOUT_RIGHT
), и вызывать его при настройке макета, например:
myStringItem.setLayout(Settings.getInstance().getJustification());
Это также можно сделать в конструкторе, если хотите.
Для низкого уровня Graphics
можно использовать метод 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.LAYOUT_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;
}
person
Jason Fox
schedule
17.01.2013