Android 软键盘
2015-06-23 15:14
381 查看
一些重要常量含义:
HIDE_IMPLICIT_ONLY 常量值: 1 (0x00000001)hideSoftInputFromWindow(IBinder, int)中的标志,表示如果用户未显式地显示软键盘窗口,则隐藏窗口。
HIDE_NOT_ALWAYS 常量值: 2 (0x00000002)
hideSoftInputFromWindow(IBinder, int)中的标志,表示软键盘窗口总是隐藏,除非开始时以SHOW_FORCED显示。
RESULT_HIDDEN 常量值: 3 (0x00000003)
showSoftInput(View, int, ResultReceiver)和hideSoftInputFromWindow(IBinder, int, ResultReceiver)中ResultReceiver结果代码标志:软键盘窗口从显示切换到隐藏时的状态。
RESULT_SHOWN 常量值: 2 (0x00000002)
showSoftInput(View, int, ResultReceiver)和hideSoftInputFromWindow(IBinder, int, ResultReceiver)中ResultReceiver结果代码标志:软键盘窗口从隐藏切换到显示时的状态。
RESULT_UNCHANGED_HIDDEN 常量值: 1 (0x00000001)
showSoftInput(View, int, ResultReceiver)和hideSoftInputFromWindow(IBinder, int, ResultReceiver)中ResultReceiver结果代码标志:软键盘窗口不变保持隐藏时的状态。
RESULT_UNCHANGED_SHOWN 常量值: 0 (0x00000000)
showSoftInput(View, int, ResultReceiver)和hideSoftInputFromWindow(IBinder, int, ResultReceiver)中ResultReceiver结果代码标志:软键盘窗口不变保持显示时的状态。
SHOW_FORCED 常量值: 2 (0x00000002)
showSoftInput(View, int)标志,表示用户强制打开输入法(如长按菜单键),一直保持打开直至只有显式关闭。
SHOW_IMPLICIT 常量值: 1 (0x00000001)
showSoftInput(View, int)标志,表示隐式显示输入窗口,非用户直接要求。窗口可能不显示。
android如何调用显示和隐藏系统默认的输入法
1.调用显示系统默认的输入法方法一、
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(m_receiverView(接受软键盘输入的视图(View)),InputMethodManager.SHOW_FORCED(提供当前操作的标记,SHOW_FORCED表示强制显示));
方法二、
InputMethodManager m=(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); (这个方法可以实现输入法在窗口上切换显示,如果输入法在窗口上已经显示,则隐藏,如果隐藏,则显示输入法到窗口上)
2.调用隐藏系统默认的输入法
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(WidgetSearchActivity.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); (WidgetSearchActivity是当前的Activity)
3.获取输入法打开的状态
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); boolean isOpen=imm.isActive(); isOpen若返回true,则表示输入法打开
1、//隐藏软键盘
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(WidgetSearchActivity.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
2、//显示软键盘,控件ID可以是EditText,TextView
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showSoftInput(控件ID, 0);
3、不自动弹出键盘:
带有EditText控件的在第一次显示的时候会自动获得focus,并弹出键盘,如果不想自动弹出键盘,有两种方法:
方法一:在mainfest文件中把对应的activity设置
android:windowSoftInputMode="stateHidden" 或者android:windowSoftInputMode="stateUnchanged"。
方法二:可以在布局中放一个隐藏的TextView,然后在onCreate的时候requsetFocus。
注意TextView不要设置Visiable=gone,否则会失效
,可以在布局中放一个隐藏的TextView,然后在onCreate的时候requsetFocus。
两个方法的区别:
//显示输入法的软键盘区域,这样用户可以到看到输入法窗口并能与其交互。只能由当前激活输入法调用,因需令牌(token)验证showSoftInputFromInputMethod (IBinder token, int flags)
//本方法切换输入法的窗口显示。如输入窗口已显示,它隐藏。如无输入窗口则显示。
public void toggleSoftInputFromWindow (IBinder windowToken, int showFlags, int hideFlags)
特殊情况下软键盘控制
1.TabActivity中嵌套的子Activity中调用软键盘://显示软键盘
mReasonEt.requestFocus(); InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(mReasonEt, 0);
//隐藏软键盘
mReasonEt.requestFocus(); InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromInputMethod(mReasonEt.getWindowToken(), 0);
在TabActivity中调用软键盘,默认会把底部Tab菜单推上去,导致界面显示和操作不方便,可以设置Activity的属性,让键盘直接覆盖底部tab菜单;如下:
androidMainfest.xml文件中在此Activity中写入 android:windowSoftInputMode="adjustPan"
2.自定义Dialog中的EditText调用软键盘:
//显示软键盘
myDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
//隐藏软键盘
myDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
3.捕获屏幕点击事件,隐藏输入法
getWindow().getDecorView().setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)) .hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); return false; } });
相关文章推荐
- Android: 如何手工生成R.java文件?
- Android详细解释键盘和鼠标事件
- Android Studio 简单设置
- android系统中捕获鼠标事件
- Android动态设置TextView的文本格式
- Android GPS学习笔记—HAL实现
- Android的AndroidManifest.xml文件介绍
- Android消息机制——时钟显示和异步处理工具类(AsyncTask)
- Android Canvas drawArc方法介绍
- Android.mk编译.apk .so .jar .a第三方.apk .so .jar .a的方法
- Android.mk添加第三方jar包
- android单元测试报错:junit.framework.AssertionFailedError: Method "xxx" not found解决方案:
- Android ListView的A-Z字母排序、分组导航、挤压动画
- android 在onCreate方法中获得view的宽高
- android属性动画详解2
- [trouble-shooting]android 无法启动X86模式虚拟机的问题解决。
- Android Animation学习笔记
- 【Android】Android开发规范的一点小体会
- Android消息处理机制
- Android 如何让EditText不自动获取焦点