【zz】android SoftKeypad 软键盘的问题(这篇写的比较详细)

只要在百度输入android 软键盘,你就能得到很多关于显示与隐藏的结果,但有些说得不很明白,我就按自己理解的和测试出来的结果分析一下: 

1,Eidtext这个控件默认是你点击了它获得焦点之后就会自动地弹出软键盘,前提是你在竖屏的时候。但横盘的时候,不会自动弹出弹出软键盘了。 
模拟器横屏时默认是打开了键盘的所以就算你用代码来显示软键盘也是显示不出来的,而像真实的手机(有物理键盘(硬件盘)比如G1)就不一样了。可以通过sensor来把画面横屏而并没正在的将键盘打开时就可以通过代码来显示软键盘了。 

2,问题在通过代码来使得软键盘显示与隐藏时可以写在某控件的onClick事件里来或者用timer来控制,若你直接在onCreate或onResume里面是不行的,从网上找来的理由说是:软件盘是要在所有view画完才能显示的。第一种情况:
Java代码
@Override  
    protected void onResume() {  
        // TODO Auto-generated method stub  
        super.onResume();  
         InputMethodManager im = ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE));  
         im.showSoftInput(tv, 0);  
     }  
} 

  

第二种情况:
Java代码
tv.setOnClickListener(new OnClickListener() {  

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
InputMethodManager im = ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE));

if (im.showSoftInput(tv, InputMethodManager.SHOW_FORCED)) {
System.out.println(" return is true fullscreenmode"
+ im.isFullscreenMode());
} else {
System.out.println(" return is not true");
}}});


3,自定义软键盘的Enter键 
转自:http://dai-lm.javaeye.com/blog/410370 

SDK升级到1.5以后,当文本输入框(EditText及其子类)获得焦点后,会弹出系统自带的软键盘 
为了实现一些自定义的功能,就稍微研究了下 

* 当layout中有多个EditText,把每个控件的android:singleLine的属性都被设置成true的情况下,软键盘的Enter键上的文字会变成“Next”,按下后下个EditText会自动获得焦点(实现了“Next”的功能);当最后一个控件获得焦点的时候,Enter键上的文字会变成“Done”,按下后软键盘会自动隐藏起来 

* 把EditText的Ime Options属性设置成不同的值,Enter键上可以显示不同的文字或图案 
actionNone : 回车键,按下后光标到下一行 
actionGo : Go, 
actionSearch : 一个放大镜 
actionSend : Send 
actionNext : Next 
actionDone : Done,隐藏软键盘,即使不是最后一个文本输入框
 
* 设置文本框的OnKeyListener,当keyCode = 66的时候,表明Enter键被按下,就可以编写自己希望的Action了
 
 
 

还有一个方法,转载的http://daydayup1989.iteye.com/blog/773036

界面表现就是一个属性的设置:

android:imeOptions

 

有如下值可设置:normal,actionUnspecified,actionNone,actionGo,actionSearch,actionSend,actionNext,actionDone

 事件捕捉java代码:

editText.setOnEditorActionListener(new TextView.OnEditorActionListener()   
                {   
                    public boolean onEditorAction(TextView v, int actionId,   
                            KeyEvent event)   
                    {   
                        if (actionId == EditorInfo.IME_ACTION_SEND)   
                        {   
                            // Do someThing   
                        }   
                        return false;   
                    }   
                }); 

posted @ 2012-01-07 10:50  阿波zju  阅读(1112)  评论(0编辑  收藏  举报