Facebook Twitter LinkedIn E-mail
magnify
Home Archive for category "LWUIT"

LWUIT 开发教程(20):自定义软键盘按键

有时需要自定义软键盘上按键,比如一个搜索框,希望把缺省的“OK”键,改成“Search”,当用户点击“Search”时完成搜索操作。

下面代码修改软键盘的按键定义,并可以为“Search”按钮添加事件处理。

Form mainForm = new Form("TextField  Demo");

mainForm.setLayout(new BorderLayout());

TextField textfield = new TextField();
String[][] SEARCH_QWERTY = new String[][]{
 {"q", "w", "e", "r", "t", "y", "u", "i", "o", "p"},
 {"a", "s", "d", "f", "g", "h", "j", "k", "l"},
 {"$Shift$", "z", "x", "c", "v", "b", "n", "m", "$Delete$"},
 {"$Mode$", "$Space$", "$Search$"}
};
VirtualKeyboard vkb = new VirtualKeyboard();
 //add the new input mode
vkb.addInputMode("ABC_S", SEARCH_QWERTY);
vkb.setInputModeOrder(new String[]{"ABC_S"});
//add the new special button to the vkb
vkb.addSpecialButton("Search", new Command("Search") {

 public void actionPerformed(ActionEvent evt) {
 //search logic...
 }
});

VirtualKeyboard.bindVirtualKeyboard(textfield, vkb);


mainForm.addComponent(BorderLayout.CENTER, textfield);

 

LWUIT 开发教程(19):设置软键盘输入模式

在某些情况下,TextField可能只接受数字,在这种情况下,启动一个全键盘不合适。此时可以创建一个“Numbers Only” 的软键盘并关联到指定的TextField.

TextField textfield=new TextField();
textfield.setConstraint(TextField.NUMERIC);
textfield.setInputModeOrder(new String[]{"123"});
textfield.setInputMode("123");
VirtualKeyboard vkb=new VirtualKeyboard();
vkb.setInputModeOrder(new String[]{VirtualKeyboard.NUMBERS_MODE});
VirtualKeyboard.bindVirtualKeyboard(textfield, vkb);

 

LWUIT 开发教程(18):为软键盘定制新语言

LWUIT中的软键盘为纯Java 实现,因此可以支持定制。

可以使用Resource editor (后面介绍)来定制软键盘的一些属性。

VKB      定制软键盘显示
VKBtooltip 定制软键盘帮助提示
VKBButton 定制软键盘的普通按键
VKBSpecialButton 定制软键盘的特殊按键(如空格键等)
VKBTextInput 定制软键盘的输入文本框。

本例介绍如何为软键盘添加一种新语言,希伯来语Hebrew ,对于中文,由于汉字个数比较多,可以通过定义汉字库的方式添加中文支持。而不像本例可以将希伯来字母定义成数组。

private static final String[][] DEFAULT_HEBREW = new String[][]{
{"\u05e7", "\u05e8", "\u05d0", "\u05d8", "\u05d5", "\u05df", "\u05dd",
 "\u05e4", "$Delete$"},
{"\u05e9", "\u05d3", "\u05d2", "\u05db", "\u05e2", "\u05d9", "\u05d7",
 "\u05dc", "\u05da"},
{"\u05d6", "\u05e1", "\u05d1", "\u05d4", "\u05e0", "\u05de", "\u05e6",
 "\u05ea", "\u05e5"},
{"$Mode$", "$Space$", "\u05E3", "$OK$"}};

然后创建一个VirtualKeyboard的子类:

public static class HebrewK extends VirtualKeyboard {

 public HebrewK() {
 addInputMode("?05d0?05d1?05d2", DEFAULT_HEBREW);
 setInputModeOrder(new String[]{"?05d0?05d1?05d2", QWERTY_MODE,
 NUMBERS_SYMBOLS_MODE, NUMBERS_MODE, SYMBOLS_MODE
 });
 }
}

最后在Display.init之前,调用VKBImplementationFactory.init(HebrewK.class);将其设置为缺省语言。

 

LWUIT 开发教程(17):Virtual Keyboard

LWUIT库支持一个轻量级的屏幕软键盘,如果你的手机没有QWERT键盘,可以打开屏幕软键盘以方便文字输入。

打开对软键盘的支持,是在Display.init() 之前调用VKBImplementationFactory.init();

VKBImplementationFactory.init();

//init the LWUIT display
Display.init(this);

//setting the application theme
try{
 Resources r=Resources.open("/LWUITtheme.res");
 UIManager.getInstance()
 .setThemeProps(r.getTheme
 (r.getThemeResourceNames()[0]));
}catch (Exception e){}


Form mainForm = new Form("TextField  Demo");

mainForm.setLayout(new BorderLayout());

TextField textfield=new TextField();
textfield.setText("This is a text field");

mainForm.addComponent(BorderLayout.CENTER, textfield);

mainForm.setTransitionOutAnimator(CommonTransitions.createFade(400));

mainForm.addCommand(new Command("Left soft key", 2));
mainForm.addCommand(new Command("Right Soft key", 2));

mainForm.show();

此后,当TextField需要输入时,软键盘会自动出现。

 

LWUIT 开发教程(16):Bidi

Bidi (bidirectional)指双向文字支持,通常文字显示的顺序为从左到右,但也有不少文字是从右到左显示的(如阿拉伯语,希伯来语等)。

LWUIT 支持双向文字显示,并支持两种文字混合显示时的算法,比如显示希伯来语中带有数字或是英文单词时,希伯来语为从右到左,而碰到数字或是英文单词时自动切换成从左到右显示。

可以简单的使用

UIManager.getInstance().getLookAndFeel().setRTL(true);

启动从右到左显示设置,一旦将setRTL 设为True,界面上的UI控件的方向和位置为原始从左到右的镜像。

本例使用Form Demo来显示一下在setRTL 为true 时的显示,注意对应的文字由于是英文,文字显示还是从左到右,但部分控件的位置左右交换了。

 

LWUIT 开发教程(15):Tickering

Label 及其子类(如Button)支持Ticker (跑马灯效果),一般来说,如果在Lable 中显示过长的文字(宽度大于屏幕),LWUIT将文字截断并在文字后面显示三个点”…”。而对于可以支持用户事件的控件(如Button, Checkbox) 获取焦点时,则长串文字可以一跑马灯的形式滚动显示文字。

也可以通过代码startTicker, 和stopTicker来控制文字的滚动和停止,如果需要关闭文字滚动,可以通过setTickerEnabled(false) ,此外,如果不想使用三个点”…” 来表示过长的文字,可以使用setEndsWith3Points(false)。startTicker 可以指定位置滚动的方向,从左到右或是从右到左。

本例使用Label 来显示Tickering 效果。

Form mainForm = new Form("Tickering Demo");
mainForm.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
Label label1=new Label("Text Only Label, "
 + "and I am a really long long text");
label1.startTicker(100, true);
mainForm.addComponent(label1);
try {
 Image icon = Image.createImage("/navigator.png");
 Label label2=new Label(icon);
 mainForm.addComponent(label2);


 Label label3=new Label(icon);
 label3.setText("Image and Text Label,"
 + " and I am a really long long text");
 mainForm.addComponent(label3);
 label3.startTicker(300, false);
 Label label4=new Label(icon);
 label4.setText("Image and Text Label at Bottom, "
 + "and I am a really long long text");
 label4.setTextPosition(Component.BOTTOM);
 label4.startTicker(100, true);
 mainForm.addComponent(label4);
} catch (IOException ex) {
 ex.printStackTrace();
}