类似于QQ聊天界面的EditView输入控件点击获取焦点弹出软件盘,点击屏幕使EditView失去焦点隐藏软件盘。
来源:互联网 发布:js判断弹出提示框 编辑:程序博客网 时间:2024/06/04 19:23
最近在做的一个项目,需求加入即时通信,也就是聊天功能模块。
遇到了不少的坑,不过都一一解决了,分享下成果图:
在此分享一下关于解决聊天界面的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; });
阅读全文
0 0
- 类似于QQ聊天界面的EditView输入控件点击获取焦点弹出软件盘,点击屏幕使EditView失去焦点隐藏软件盘。
- Android中的EditView如何不默认获取焦点弹出软键盘,点击EditView后会弹出?
- 点击屏幕其它地方,让EditText失去焦点,并获取EditText输入的类容
- EditView点击时软键盘不弹出而不能输入的BUG
- Android点击EditText之外的地方隐藏软键盘同时使EditText失去焦点
- 阻止EditView自动获取焦点
- 不让EditView自动获取焦点
- editview点击焦点如何被其他空间夺走
- 点击textview获取焦点的同时不弹出软键盘
- 【问题记录】解决,打开app时,EditView的自动获得焦点,并且软键盘弹出
- 点击屏幕其他地方让edittext失去焦点并隐藏输入法的实现方法
- 点击屏幕其他地方让edittext失去焦点并隐藏输入法的实现方法
- 点击EditView时隐藏hide
- 点击屏幕其他地方让edittext失去焦点 的实现
- 点击屏幕其他地方让edittext失去焦点 的实现
- ListView里面有EditTextView,解决弹出键盘后EditView不能获取焦点的问题
- ListView里面有EditTextView,解决弹出键盘后EditView不能获取焦点的问题
- ListView里面有EditTextView,解决弹出键盘后EditView不能获取焦点的问题
- thinkPHP的数据添加、修改、删除
- PyQt5学习记录(5)---QDockWidget和QListWidget的基础综合使用
- Thread,Looper,Handler,Message,MessageQueue原理机制以及它们之间的关系
- Spring自定义属性编辑器——2
- UBOOT主makefile流程分析
- 类似于QQ聊天界面的EditView输入控件点击获取焦点弹出软件盘,点击屏幕使EditView失去焦点隐藏软件盘。
- [NOI2005] 维护数列(fhq-Treap)
- laravle 中 validate 汉化
- 大素数判定板子
- C# 动态调用WebService
- 包(package)
- async函数基础
- C++修饰符----继承
- 事务管理之Spring事务管理