Android软键盘总结

今天做优化的时候遇到一个软键盘的问题。
在聊天页面,输入文本后点击发送后 要固定软键盘。
做一下总结:

           View view = getWindow().peekDecorView();
            if (view != null) {
                InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0);
            }

这段代码在Activity中有效。不可以写在Fragment中。在Fragment中getWindow() 无效
在Fragment的中的解决方案是在Fragment 的Activity中 onCreate() 中加上这段代码:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

设置软件盘的初始状态。

在这儿之中还发现了一些小问题,由于入坑时间较短,基础也不是很牢固,有的问题经常会抛给我们技术们的大神。
在msgEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { } };
在点击发送之后,键盘隐藏掉,希望不隐藏软键盘 这样可以连续发送。。。之前我用上面的方法,如果隐藏了就显示 ,但我调试的发现,会有闪屏的现象。软键盘在隐藏之后又上来了。
最终的解决办法是 把onEditorAction()中的 return false; 改成 return true;
如果返回true 表示你已经对它进行了处理,不需要系统进行处理。
引用:
说的简单点,android里面的按键事件都是一层一层分发的,每一次处理都默认的调super方法,这样就能保证能一层一层下去。如果你重写按键事件,显示的return true,就表示你消耗掉了这个按键事件,消息发到你这里被消耗掉,不再往下发。return false 则是没有消耗这个按键并不是不处理,你可以写个demo,实际上还是处理了的,只是不会继续分发,因为已经被你return掉了。

原则上应该是这样的,你需要处理的按键你就return true,不需要处理的按键事件就return super.XXX这样你不要处理的按键可以继续发下去。
一般SDK中对系统的函数都是有返回值的说明,因为大部分系统函数都应该返回父类的函数返回值,比如onTouch事件就是如此,返回true就是代表你已经自己处理了,不需要系统处理,反之则应该返回父类的ontouch。返回true的时候表示事件已经完整的执行完毕了,不再执行其他的回调函数,返回false表示并未完全处理完该事件还会继续调用其他回调函数。
例如:
return super.onCreateOptionsMenu(menu);就是把super.onCreateOptionsMenu(menu)的执行结果原封不动的返回,是true还是false由父类的返回值绝对。
api中很多地方写了以onkeyup为例
通俗一点讲
return true表示你自己已经做了实现,不需要父类的实现。如果你只实现了left那么你return true,就会导致其他按键menu,right…的事件不可用。


关注我的微信公众号,每天都有优质技术文章,搞笑GIF图片推送哦。
这里写图片描述

Scott

2016-10-23

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值