关于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

原文地址:http://blog.51cto.com/13586365/2065325

时间: 2024-11-03 21:23:33

关于SnackBar被键盘挡住的解决方案的相关文章

flutter TextField 输入框被软键盘挡住的解决方案

以前搞ionic1~4的开发中 和react-native   flutter中的机制完全不同, 在flutter 中 当前页面如果存在元素被软键盘挡住 的情况 页面元素的最外层肯定得嵌套一层   SingleChildScrollView body: Container( //SingleChildScrollView 的父级元素得有高度 最外层Container默认 填充全部 child: SingleChildScrollView( ........ ) ) SingleChildScro

软键盘挡住输入框的解决方案

大家在布局时候,有时候会发现输入框被挡住一部分,能完全显示出来,但是系统自带短信界面 可以完全漂浮在软键盘之上,看了一下短信源码,修改一下输入模式就可以了,源码如下 代码方式:  getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE |                 WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);   xml方式:

Android爬坑之旅:软键盘挡住输入框问题的终极解决方案

前言 开发做得久了,总免不了会遇到各种坑.而在Android开发的路上,『软键盘挡住了输入框』这个坑,可谓是一个旷日持久的巨坑--来来来,我们慢慢看. 入门篇 Base 最基本的情况,如图所示:在页面底部有一个EditText,如果不做任何处理,那么在软键盘弹出的时候,就有可能会挡住EditText.对于这种情况的处理其实很简单,只需要在AndroidManifest文件中对activity设置:android:windowSoftInputMode的值adjustPan或者adjustResi

根据键盘调整textField(多个)位置使其不会被键盘挡住

当一个界面上有个textField时,键盘出现时需要保证textField不会被键盘挡住. 一般的做法是,监听 UIKeyboardWillShowNotification和 UIKeyboardWillHideNotification,在通知的selector方法中通过notification.userInfo获取键盘的相关信息,然后调整界面的位置. 但是当界面上有两个以上的textField时,问题来了:在textField之间切换的时候UIKeyboardWillShowNotificat

隐藏虚拟键盘,解决键盘挡住UITextField问题

再正式开始之前,先来介绍一下IOS的键盘类型: 一.键盘风格 UIKit框架支持8种风格键盘 ? 1 2 3 4 5 6 7 8 9 10 typedef enum {      UIKeyboardTypeDefault,                // 默认键盘:支持所有字符       UIKeyboardTypeASCIICapable,           // 支持ASCII的默认键盘       UIKeyboardTypeNumbersAndPunctuation,  //

【转】iOS 上常用的两个功能:点击屏幕和return退出隐藏键盘和解决虚拟键盘挡住UITextField的方法

iOS上面对键盘的处理很不人性化,所以这些功能都需要自己来实现, 首先是点击return和屏幕隐藏键盘 这个首先引用双子座的博客 http://my.oschina.net/plumsoft/blog/42545,他的文章写的很好,对大家的理解很有好处. 在 iOS 程序中当想要在文本框中输入数据,轻触文本框会打开键盘.对于 iPad 程序,其键盘有一个按钮可以用来关闭键盘,但是 iPhone 程序中的键盘却没有这样的按钮,不过我们可以采取一些方法关闭它.例如,我们可以实现按下 Rerun (有

移动端输入框被手机键盘挡住

在没有定位的情况下,解决输入框被手机键盘挡住时,可以参考: var loaclHeight = $("section").height();//获取可视宽度 $("input,textarea").focus(function() { var keyboardHeight = localHeight - $("section").height();//获取键盘的高度 var keyboardY = localHeight - keyboardHe

iOS 键盘挡住UITextField

iOS经常使用的两个功能:点击屏幕和return隐藏虚拟键盘和解决虚拟键盘挡住UITextField的方法 iOS上面对键盘的处理非常不人性化,所以这些功能都须要自己来实现, 首先是点击return和屏幕隐藏键盘 这个首先引用双子座的博客 http://my.oschina.net/plumsoft/blog/42545,他的文章写的非常好.对大家的理解非常有优点. 在 iOS 程序中当想要在文本框中输入数据,轻触文本框会打开键盘.对于 iPad 程序.其键盘有一个button能够用来关闭键盘,

EditText 默认不获取焦点,弹出软键盘布局变形解决方案

关于弹出软键盘布局变形解决方案: 在androidMainfest.xml文件中在此Activity中写入 android:windowSoftInputMode="adjustPan" 在实际开发中,有的页面用到Edittext控件,这时候进入该页面可能会自动弹出输入法 这么显示不太友好,所以需要设置一下让Edittext默认不自动获取焦点.在网上查资料解决办法如下: 在EditText的父级控件中找一个,设置成 android:focusable="true"