关于SnackBar被键盘挡住的解决方案
snackbar比toast好看多了,所以新的app我把所有的toast都替换成了snackbar。
但是问题也随之而来,我在登录注册等需要用到键盘的地方,如果我没手动关闭键盘,那snackbar就会被键盘给挡住,导致用户看不到相应的提示。对此有以下两个解决办法:1.在用户点击提交的时候关闭键盘关于关闭键盘,android没有直接提供给我们方法提供,可以使用如下方法
/** * 关闭键盘 */@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)public static void disappearKeybaroad(Activity context) { InputMethodManager imm = (InputMethodManager) context.getSystemService(INPUT_METHOD_SERVICE); if (isSoftShowing(context)) {//先判断键盘是否是开启状态,是则关闭 imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); }}/** * 判断键盘是否在显示 */@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)public static boolean isSoftShowing(Activity context) { //获取当前屏幕内容的高度 int screenHeight = context.getWindow().getDecorView().getHeight(); //获取View可见区域的bottom Rect rect = new Rect(); context.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); return screenHeight - rect.bottom - getSoftButtonsBarHeight(context) != 0;}/** * 底部虚拟按键栏的高度 * * @return */@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)private static int getSoftButtonsBarHeight(Activity activity) { DisplayMetrics metrics = new DisplayMetrics(); //这个方法获取可能不是真实屏幕的高度 activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); int usableHeight = metrics.heightPixels; //获取当前屏幕的真实高度 activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics); int realHeight = metrics.heightPixels; if (realHeight > usableHeight) { return realHeight - usableHeight; } else { return 0; }}
2.当键盘弹起时,让键盘把snackBar顶起来,效果图如下
关于这样的做法相对于关闭键盘要简单的多,只需要在manifests中为对应的activity加上这句配置即可:
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"这条配置的主要作用就是让键盘不要挡住我们输入的内容,对应的activity有了以上配置就可以实现上述效果了O(∩_∩)O
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。