隐藏软键盘方法
2016-03-01 11:36
183 查看
有的时候,我们会接受到一些莫名的需求,比如说自己定制键盘, 计算器等等. 如果我们用EditText的话, 系统会默认弹出软键盘,为了需求需要。 我们需要想尽各种办法 来把系统的软件盘给隐藏掉.
现在网上有很多隐藏软键盘的方法,如下所示:
1, 如果软键盘正在显示,那么调用以下代码就会隐藏, 反之一样.
2.强制隐藏软键盘.
3.默认不显示软键盘, 在Activity节点下配置.
以上几种方法其实都不是理想状态, 只要你在点击一下EditText, 软键盘还是会弹出来, 下面我会说两种理想状态的实现方式.
1. 设置 editText.setInputType(InputType.TYPE_NULL); 设置后则不会弹出软键盘, 不过唯一不足的是 没有了光标. 只能从前到后依次输入.
2. 用该方法的前提 是版本必须要 >3.0 也就是 sdk 10以上. 否则 就只能使用上面的 TYPE_NULL了, 下面贴代码。
接下来你只需要把它当成自定义控件一样使用就可以了, 完美解决了不弹出软键盘问题.
这里就不贴下载地址了. 用的话 复制代码即可。
源码地址:传送门, 传送门1
现在网上有很多隐藏软键盘的方法,如下所示:
1, 如果软键盘正在显示,那么调用以下代码就会隐藏, 反之一样.
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS)
2.强制隐藏软键盘.
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(et.getWindowToken(), 0);
3.默认不显示软键盘, 在Activity节点下配置.
Android:windowSoftInputMode="adjustUnspecified|stateHidden"
以上几种方法其实都不是理想状态, 只要你在点击一下EditText, 软键盘还是会弹出来, 下面我会说两种理想状态的实现方式.
1. 设置 editText.setInputType(InputType.TYPE_NULL); 设置后则不会弹出软键盘, 不过唯一不足的是 没有了光标. 只能从前到后依次输入.
2. 用该方法的前提 是版本必须要 >3.0 也就是 sdk 10以上. 否则 就只能使用上面的 TYPE_NULL了, 下面贴代码。
public class NoSoftKbEditText extends EditText { public NoSoftKbEditText(Context context) { super(context); init(); } public NoSoftKbEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public NoSoftKbEditText(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { if (android.os.Build.VERSION.SDK_INT > 10) { // 3.0及其以上 Class<EditText> clazz = EditText.class; Method setShowSoftInputOnFocus = null; try { //利用反射获取系统setShowSoftInputOnFocus方法 setShowSoftInputOnFocus = clazz.getMethod("setShowSoftInputOnFocus", boolean.class); } catch (Exception e) { try { //出现异常再次获取. setShowSoftInputOnFocus = clazz.getMethod("setSoftInputShownOnFocus", boolean.class); } catch (NoSuchMethodException ex) { } } if (setShowSoftInputOnFocus != null) { setShowSoftInputOnFocus.setAccessible(false); try { setShowSoftInputOnFocus.invoke(this, false); //反射调用该方法 并设置第二参数为false. } catch (Exception e) { this.setInputType(InputType.TYPE_NULL); //出现异常则 设置成没有光标的状态 } } else { // 没有获取到方法 则设置成无光标状态. this.setInputType(InputType.TYPE_NULL); } } else {// 3.0以下 this.setInputType(InputType.TYPE_NULL); } } }
接下来你只需要把它当成自定义控件一样使用就可以了, 完美解决了不弹出软键盘问题.
这里就不贴下载地址了. 用的话 复制代码即可。
源码地址:传送门, 传送门1
相关文章推荐
- leetcode 每日一题 258. Add Digits
- PHP中字符串替换函数之strtr详解
- iOS 高效添加圆角效果实战讲解
- C++ Super-FAQ 『Assignment Operators』
- 数据字典 dba_free_space及相对文件号RELATIVE_FNO 小结
- oracle中避免sort操作
- Hbase分布式安装部署过程
- 最小二乘法的几何意义 – 巧妙记忆公式的方法
- ShareSDK3.x (简洁版)遇到的坑......
- 第一行代码-10.4 解析JSON格式数据
- Android正确进行数据存储
- JSON解析
- SequoialDB实验
- 全局搜索数据库
- codeforces 630B Moore's Law
- [bzoj3622]已经没有什么好害怕的了
- LDAP服务原理详解
- 网络知识方面的面试题
- #leetcode# Best Time to Buy and Sell Stock II
- PAT-A1002A+B for Polynomials(模拟)