在界面开发过程中,需要使用edittext来输入内容用来匹配查找,然后点击其他区域收起输入法。
本文在一个布局里有edittext 和一个list view ,edittext 输入内容,搜索list 里面的内容。然后点击其他区域后可以让输入法消失。
1.点击edittext 调出输入法键盘:
clearEditText 为继承exitText的编辑框。
监听touch事件,若点击了edittext,则获取焦点。
clearEditText.setOnTouchListener(clearEditTouchListener);
private View.OnTouchListener clearEditTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { clearEditText.setFocusable(true); clearEditText.setFocusableInTouchMode(true); return false; } };
2. 点击edittext 区域外可以实现隐藏键盘。
/** * 点击edittext 以外的区域edittext 会失去焦点 * * @param ev * @return */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { if (isEditTextArea(ev)) { //确认是否为EditText区域,若不是,则返回true,隐藏输入法 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (null != imm) { imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0); } } return super.dispatchTouchEvent(ev); } if (getWindow().superDispatchTouchEvent(ev)) { return true; } return onTouchEvent(ev); } private boolean isEditTextArea(MotionEvent motionEvent) { View v = getCurrentFocus(); //获取当前焦点view if (null != v && (v instanceof EditText)) { //若焦点view 为editText,则进行点击区域的判断 int[] leftTop = {0, 0}; v.getLocationInWindow(leftTop); //获取屏幕中的位置 int left = leftTop[0]; int top = leftTop[1]; int right = left + v.getWidth(); int bottom = top + v.getHeight(); // if (motionEvent.getX() > left && motionEvent.getX() < right // && motionEvent.getY() > top && motionEvent.getY() < bottom) { if (motionEvent.getY() > top && motionEvent.getY() < bottom) { //点击区域是输入框的话就保留事件 // 点击的是输入框区域,保留点击EditText的事件 return false; } else { //
clearEditText.setFocusableInTouchMode(false); clearEditText.setFocusable(false); return true; } } return false; }
本文介绍如何在Android应用中实现EditText输入法的自动显示与隐藏功能。通过监听触摸事件来控制输入法的弹出,并在点击EditText以外的区域时隐藏输入法。此方法适用于包含EditText和ListView的布局。
741

被折叠的 条评论
为什么被折叠?



