Android中关于键盘管理,点击除editText外的区域收起键盘
16lz
2021-01-25
Android中关于键盘管理,点击除editText外的区域收起键盘
借鉴这位大神的:http://blog.csdn.net/qibin0506 代码如下:
/** * Created by xiaoMan on 2016/11/22. * Email:1635401972@qq.com * Details: */public class AutoHideIMEFrameLayout extends FrameLayout { public AutoHideIMEFrameLayout(Context context) { super(context); } public AutoHideIMEFrameLayout(Context context, AttributeSet attrs) { super(context, attrs); } public AutoHideIMEFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { Context context = getContext(); if (context == null || !(context instanceof Activity)) { return super.dispatchTouchEvent(ev); } Activity activity = (Activity) context; View focusView = activity.getCurrentFocus(); if (focusView != null && shouldHideInputMethod(focusView, ev)) { hideInputMethod(focusView); } } return super.dispatchTouchEvent(ev); } private boolean shouldHideInputMethod(View focusView, MotionEvent event) { Rect rect = new Rect(); focusView.getHitRect(rect); return !rect.contains((int) event.getX(), (int) event.getY()); } private void hideInputMethod(View currentFocus) { if (currentFocus == null) { return; } InputMethodManager imm = (InputMethodManager) currentFocus.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); }}
2
/** * Created by xiaoMan on 2016/11/22. * Email:1635401972@qq.com * Details: */public class HideIMEUtil { public static void wrap(Activity activity) { ViewGroup contentParent = (ViewGroup) activity.findViewById(android.R.id.content); wrap(contentParent); } public static void wrap(Fragment fragment) { ViewGroup contentParent = (ViewGroup) fragment.getView().getParent(); wrap(contentParent); } public static void wrap(ViewGroup contentParent) { View content = contentParent.getChildAt(0); contentParent.removeView(content); ViewGroup.LayoutParams p = content.getLayoutParams(); AutoHideIMEFrameLayout layout = new AutoHideIMEFrameLayout(content.getContext()); layout.addView(content); contentParent.addView(layout, new ViewGroup.LayoutParams(p.width, p.height)); }}
3.使用的时候只需:
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AppManager.getAppManager().addActivity(this); setContentView(R.layout.activity_set_email_layout); HideIMEUtil.wrap(this);//键盘管理,点击除editText外区域收起键盘 initView(); setTopView();}
更多相关文章
- android 按键映射qwerty.kl文件中的WAKE和WAKE_DROPPED的定义
- android 模拟器键盘控制键不能用 以及 设置模拟器屏幕大小
- android中动态给EditText获得焦点并弹起软键盘的方法详解
- Android(安卓)windowSoftInputMode属性
- android强制键盘关闭
- Android(安卓)7.0软键盘隐藏问题
- Android自定义键盘之汉字键盘
- android中自定义view涉及到的绘制知识
- Android(安卓)设置屏幕不待机