Если вы используете 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;
}