android软键盘的一些控制

转载 2013年12月03日 09:18:59

"EditText + Button"  形成一个 "输入+按键响应" 的案例在android编程中是最常见不过的了。

但还有一些细节需要注意:

  1. 在EditText输入后,点击Button进行请求,软键盘应该自行消失
  2. 在EditText输入后,不点击Button进行请求,而是直接点击软键盘上的"回车",那么也应该能够正常响应请求
针对问题1,可以在响应Button的onClick事件中,主动将软键盘隐藏,加入如下代码即可
[java] view plaincopy
  1. InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);  
  2. imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);  
针对问题2,可以在EditText的api doc中找到答案
[plain] view plaincopy
  1. public void setOnEditorActionListener (TextView.OnEditorActionListener l)  
  2.   
  3. Set a special listener to be called when an action is performed on the text view. This will be called when the enter key is pressed, or when an action supplied to the IME is selected by the user. Setting this means that the normal hard key event will not insert a newline into the text view, even if it is multi-line; holding down the ALT modifier will, however, allow the user to insert a newline character.  
因此,只需要给EditText设置一个onEditorActionListener就好了,简单示例如下
[java] view plaincopy
  1. mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {  
  2.     @Override  
  3.     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {  
  4.         //TODO 这里做"回车"响应处理  
  5.         return true;  
  6.     }  
  7. });  
备注一下:TextView.OnEditorActionListener接口方法onEditorAction方法的第二个参数actionId,其可能的值在EditorInfo的说明中能够找到。列举如下:
IME_ACTION_DONE
IME_ACTION_GO
IME_ACTION_NEXT
IME_ACTION_NONE
IME_ACTION_PREVIOUS
IME_ACTION_SEARCH
IME_ACTION_SEND
IME_ACTION_UNSPECIFIED



软键盘的Enter键默认显示的是“完成”文本,我们知道按Enter建表示前置工作已经准备完毕了,要去什么什么啦。比如,在一个搜索中,我们输入要搜索的文本,然后按Enter表示要去搜索了,但是默认的Enter键显示的是“完成”文本,看着不太合适,不符合搜索的语义,如果能显示“搜索”两个字或者显示一个表示搜索的图标多好。事实证明我们的想法是合理的,Android也为我们提供的这样的功能。通过设置android:imeOptions来改变默认的“完成”文本。这里举几个常用的常量值:

  1. actionUnspecified  未指定,对应常量EditorInfo.IME_ACTION_UNSPECIFIED.效果:
  2. actionNone 没有动作,对应常量EditorInfo.IME_ACTION_NONE 效果:
  3. actionGo 去往,对应常量EditorInfo.IME_ACTION_GO 效果:
  4. actionSearch 搜索,对应常量EditorInfo.IME_ACTION_SEARCH 效果: 
  5. actionSend 发送,对应常量EditorInfo.IME_ACTION_SEND 效果:
  6. actionNext 下一个,对应常量EditorInfo.IME_ACTION_NEXT 效果:
  7. actionDone 完成,对应常量EditorInfo.IME_ACTION_DONE 效果:

 下面已搜索为例,演示一个实例,修改main.xml如下:

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <EditText  
  8.     android:id="@+id/edit_text"    
  9.     android:layout_width="fill_parent"   
  10.     android:layout_height="wrap_content"  
  11.     android:imeOptions="actionSearch"/>  
  12. </LinearLayout>  

  修改HelloEditText如下:

Java代码  收藏代码
  1. package com.flysnow;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.KeyEvent;  
  6. import android.widget.EditText;  
  7. import android.widget.TextView;  
  8. import android.widget.Toast;  
  9. import android.widget.TextView.OnEditorActionListener;  
  10.   
  11. public class HelloEditText extends Activity {  
  12.     /** Called when the activity is first created. */  
  13.     @Override  
  14.     public void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.main);  
  17.         EditText editText=(EditText)findViewById(R.id.edit_text);  
  18.         editText.setOnEditorActionListener(new OnEditorActionListener() {  
  19.             @Override  
  20.             public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {  
  21.                 Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show();  
  22.                 return false;  
  23.             }  
  24.         });  
  25.     }  
  26. }  

 运行程序,点击回车(也就是搜索图标软键盘按钮)会显示该actionId.我们上面的每一个设置都会对应一个常量,这里的actionId就是那个常量值。 

Edit.setOnEditorActionListener(new OnEditorActionListener()
        {
            
            @Override
            public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2)
            {
                passwordEdit.setFocusable(true);
                passwordEdit.setFocusableInTouchMode(true);
                passwordEdit.requestFocus();
                passwordEdit.requestFocusFromTouch();
                return true;
            }
        });

相关文章推荐

Android软键盘自动显示,手动控制显示与隐藏

Android软键盘自动显示,手动控制显示与隐藏1软键盘自动弹出//设置软键盘自动弹出 etTitle.setFocusable(true); etTitle.setFocusableInTouchM...
  • bin622
  • bin622
  • 2016年06月16日 00:53
  • 237

android软键盘的一些控制

"EditText + Button"  形成一个 "输入+按键响应" 的案例在android编程中是最常见不过的了。 但还有一些细节需要注意: 在EditText输入后,点击Button进行...

[转载]android 软键盘弹出时的界面控制

查看原文     一、软键盘显示的原理     软键盘的本质是什么?软键盘其实是一个Dialog!     InputMethodService为我们的输入法创建了一个D...
  • actual_
  • actual_
  • 2012年01月31日 11:00
  • 1843

android控制软键盘显示与隐藏

在最近的项目需求中,交互发现在许多页面中,当

Android 弹软键盘时listview的变化控制

问题描述:界面中有三部分,上面是标题栏,中间是Listview,下面是输出框。当点击输入框时,保持标题栏,挤压ListView。最终效果类似于微信聊天界面 设置一:在AndroidMnanifes...

新东西012--Android软键盘弹出位置控制

基于该文章参考补充修改:http://blog.csdn.net/twoicewoo/article/details/7384398 在Activity/Dialog/popwindow中经常会...

android 软键盘弹出时的界面控制

一、软键盘显示的原理     软键盘的本质是什么?软键盘其实是一个Dialog!     InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的W...

Android控制软键盘的弹出和隐藏

弹出软键盘 前提:必须要有一个可以编辑的控件(我知道的只有EditText),并且当前已经获取焦点 /** * 弹出软键盘 */ public void openKeyboard(View v...

Android软键盘的一些控制

"EditText + Button" 形成一个 "输入+按键响应" 的案例在android编程中是最常见不过的了。 但还有一些细节需要注意: 在EditText输入后,点击Button进行请...

android软键盘的一些控制

"EditText + Button"  形成一个 "输入+按键响应" 的案例在android编程中是最常见不过的了。 但还有一些细节需要注意: 在EditText输入后,点击Button进行请求...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android软键盘的一些控制
举报原因:
原因补充:

(最多只允许输入30个字)