關於SnackBar被鍵盤擋住的解決方案

snackbar比toast好看多了,因此新的app我把全部的toast都替換成了snackbar。android

可是問題也隨之而來,我在登陸註冊等須要用到鍵盤的地方,若是我沒手動關閉鍵盤,那snackbar就會被鍵盤給擋住,致使用戶看不到相應的提示。
對此有如下兩個解決辦法:
1.在用戶點擊提交的時候關閉鍵盤

關於關閉鍵盤,android沒有直接提供給咱們方法提供,能夠使用以下方法api

/**
 * 關閉鍵盤
 */
@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頂起來,效果圖以下

圖片發自簡書App

關於這樣的作法相對於關閉鍵盤要簡單的多,只須要在manifests中爲對應的activity加上這句配置便可:app

android:windowSoftInputMode="stateAlwaysHidden|adjustResize"

這條配置的主要做用就是讓鍵盤不要擋住咱們輸入的內容,對應的activity有了以上配置就能夠實現上述效果了O(∩_∩)Oide

相關文章
相關標籤/搜索