snackbar比toast好看多了,所以新的app我把所有的toast都替換成了snackbar狼犯。
但是問(wèn)題也隨之而來(lái)余寥,我在登錄注冊(cè)等需要用到鍵盤(pán)的地方领铐,如果我沒(méi)手動(dòng)關(guān)閉鍵盤(pán)复哆,那snackbar就會(huì)被鍵盤(pán)給擋住你踩,導(dǎo)致用戶(hù)看不到相應(yīng)的提示侦镇。
對(duì)此有以下兩個(gè)解決辦法:
1.在用戶(hù)點(diǎn)擊提交的時(shí)候關(guān)閉鍵盤(pán)
關(guān)于關(guān)閉鍵盤(pán)尝艘,android沒(méi)有直接提供給我們方法提供浅辙,可以使用如下方法
/**
* 關(guān)閉鍵盤(pán)
*/
@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)) {//先判斷鍵盤(pán)是否是開(kāi)啟狀態(tài)灶平,是則關(guān)閉
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}
}
/**
* 判斷鍵盤(pán)是否在顯示
*/
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
public static boolean isSoftShowing(Activity context) {
//獲取當(dāng)前屏幕內(nèi)容的高度
int screenHeight = context.getWindow().getDecorView().getHeight();
//獲取View可見(jiàn)區(qū)域的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();
//這個(gè)方法獲取可能不是真實(shí)屏幕的高度
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
int usableHeight = metrics.heightPixels;
//獲取當(dāng)前屏幕的真實(shí)高度
activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
int realHeight = metrics.heightPixels;
if (realHeight > usableHeight) {
return realHeight - usableHeight;
} else {
return 0;
}
}
2.當(dāng)鍵盤(pán)彈起時(shí)乞旦,讓鍵盤(pán)把snackBar頂起來(lái)偏序,效果圖如下
圖片發(fā)自簡(jiǎn)書(shū)App
關(guān)于這樣的做法相對(duì)于關(guān)閉鍵盤(pán)要簡(jiǎn)單的多续膳,只需要在manifests中為對(duì)應(yīng)的activity加上這句配置即可:
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
這條配置的主要作用就是讓鍵盤(pán)不要擋住我們輸入的內(nèi)容改艇,對(duì)應(yīng)的activity有了以上配置就可以實(shí)現(xiàn)上述效果了O(∩_∩)O??