类似于QQ聊天界面的EditView输入控件点击获取焦点弹出软件盘,点击屏幕使EditView失去焦点隐藏软件盘。
2017-08-05 13:50
771 查看
最近在做的一个项目,需求加入即时通信,也就是聊天功能模块。
遇到了不少的坑,不过都一一解决了,分享下成果图:
在此分享一下关于解决聊天界面的EditView输入控件点击获取焦点弹出软件盘,点击屏幕使EditView失去焦点隐藏软件盘的方法。
使EditView强制失去焦点:
使EditView强制获取焦点:
为EditView控件添加点击事件:
重写跟布局控件拦截触摸屏事件方法,需要自定义一个View继承该父布局,然后重写方法。
我这里的根布局是RelativeLayout控件,直接贴代码:
在Activity中使用:
遇到了不少的坑,不过都一一解决了,分享下成果图:
在此分享一下关于解决聊天界面的EditView输入控件点击获取焦点弹出软件盘,点击屏幕使EditView失去焦点隐藏软件盘的方法。
使EditView强制失去焦点:
/** * 取消输入控件的焦点 * @return 成功返回true,失败返回false */ public boolean escInputViewFocus(){ reset(); { //强制控件失去焦点 mEtInput.clearFocus(); mEtInput.setFocusable(false); } return true; }
使EditView强制获取焦点:
/** * 为输入控件强制获取焦点 */ public void setEditTextInputFocus() { { //强制获取焦点 mEtInput.setFocusable(true); mEtInput.setFocusableInTouchMode(true); mEtInput.requestFocus(); } TDevice.showSoftKeyboard(this.mEtInput); }
为EditView控件添加点击事件:
/** * 为输入控件添加点击事件 */ private void setEditViewOnClick(){ mEtInput.setOnClickListener(v->setEditTextInputFocus() ); }
重写跟布局控件拦截触摸屏事件方法,需要自定义一个View继承该父布局,然后重写方法。
我这里的根布局是RelativeLayout控件,直接贴代码:
/** * 拦截触摸手势处理 * Created by wujiuye on 2017/8/5. */ public class InterceptRelativeLayout extends RelativeLayout { /** * 触屏事件监听接口 */ public interface OnInterceptTouchListener{ /** * @return true表示要拦截该事件处理,false表示处理但不拦截 */ boolean onTouch(); } private OnInterceptTouchListener mOnTouchListener=null; public void setOnInterceptTouchListener(OnInterceptTouchListener onTouchListener){ this.mOnTouchListener = onTouchListener; } public InterceptRelativeLayout(Context context) { this(context,null); } public InterceptRelativeLayout(Context context, AttributeSet attrs) { this(context, attrs,0); } public InterceptRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) { this(context, attrs, defStyleAttr,0); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public InterceptRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } /** * 判断与拦截触屏事件 * @param ev * @return */ @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if(mOnTouchListener!=null) if(mOnTouchListener.onTouch()) return true; return super.onInterceptTouchEvent(ev); } }
在Activity中使用:
//点击屏幕让输入控件失去焦点 mInterceptRelativeLayout.setOnInterceptTouchListener(() -> { if (mEmojiFragment.inputViewHasFocus())//如果输入控件当前有焦点 return mEmojiFragment.escInputViewFocus();//强制EditView失去焦点 return false; });
相关文章推荐
- 点击屏幕其它地方,让EditText失去焦点,并获取EditText输入的类容
- android EditTextView 设置不可输入不可点击及获取焦点
- Android EditText设置默认不弹出软键盘,点击EditText外部隐藏软键盘,EditText获取焦点时隐藏hint
- 解决RecyclerView实现聊天界面,但点击下面的EditText后弹出的输入法会遮盖RecyclerView内容的方法
- EditText 获取焦点时 输入法弹出 点击EditText以外的部分 输入法隐藏
- 安卓(Android)在AlertDialog中的EditText获取焦点并弹出、隐藏软键盘(输入法软件)
- Android中的EditView如何不默认获取焦点弹出软键盘,点击EditView后会弹出?
- 点击屏幕其他地方让edittext失去焦点并隐藏输入法的实现方法
- [Phonegap+Sencha Touch] 移动开发58 从移动浏览器(或webview)网页上点击链接跳转到QQ聊天界面
- qq即时聊天(点击图片,弹出qq聊天界面)
- 解决初始界面后EditText自动获取焦点 弹出软键盘
- 手机调用系统的拍照和裁剪功能,假设界面有输入框EditText,在一些手机会出现点击EditText会弹出输入法,却不能输入的情况。
- activity中界面中edittext自动获取焦点(软键盘弹出)解决
- 关于Edittext点击弹出软键盘,布局上移标题消失问题,微信聊天界面
- 安卓使用EditText进入一个新页面时自动获取焦点弹出输入法界面解决办法
- 点击edit控件弹出对话框,焦点不在该对话框上时,对话框摧毁
- 短信会话界面EditText,焦点获取直接弹出输入法的问题
- 点击textview获取焦点的同时不弹出软键盘
- 简单使用技巧 隐藏键盘, 判断软键盘是否打开. edittext解决第二次点击获取焦点
- Android开发之使一打开activity等界面Edittext获取焦点,弹出软键盘java代码实现