今天在過程中遇到了關于Android軟件盤的問題,點擊輸入框眶俩,目前彈出鍵盤會擋住輸入框础淤,需要手動上移頁面,這樣的app可能會給用戶帶來不便.因此對軟鍵盤進行優(yōu)化,然后一頓百度,最后找到解決方案,其實關于軟鍵盤的解決都在在AndroidManifest.xml文件中界面對應的<activity>里設置windowSoftInputMode屬性即可,下面把踩過的坑分享給大家,避免大家在踩坑坑哦!!!
先說鍵盤遮擋輸入框的問題,在AndroidManifest.xml中添加 android:windowSoftInputMode="adjustPan|stateHidden"即可
<activity
android:windowSoftInputMode="adjustPan|stateHidden"
android:name=".ui.activity.DeviceEditActivity"
android:screenOrientation="portrait" />
下面把更多關于windowSoftInputMode屬性內(nèi)部各個值的含義分享給大家:
stateUnspecified
:軟鍵盤的狀態(tài)并沒有指定,系統(tǒng)將選擇一個合適的狀態(tài)或依賴于主題的設置
stateUnchanged
:當這個activity出現(xiàn)時,軟鍵盤將一直保持在上一個activity里的狀態(tài)灯节,無論是隱藏還是顯示
stateHidden
:用戶選擇activity時,軟鍵盤總是被隱藏
stateAlwaysHidden
:當該Activity主窗口獲取焦點時绵估,軟鍵盤也總是被隱藏的
stateVisible
:軟鍵盤通常是可見的
stateAlwaysVisible
:用戶選擇activity時显晶,軟鍵盤總是顯示的狀態(tài)
adjustUnspecified
:默認設置,通常由系統(tǒng)自行決定是隱藏還是顯示
adjustResize
:該Activity總是調(diào)整屏幕的大小以便留出軟鍵盤的空間
adjustPan
:當前窗口的內(nèi)容將自動移動以便當前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內(nèi)容的部分
例如:
AndroidManifest.xml文件中界面對應的<activity>里加入
android:windowSoftInputMode="adjustPan" 鍵盤就會覆蓋屏幕
android:windowSoftInputMode="stateVisible|adjustResize" 屏幕整體上移
android:windowSoftInputMode="adjustPan|stateHidden" 軟鍵盤彈出壹士,界面布局不變,這是解決彈出軟鍵盤偿警,界面整體被壓縮的方式
如果是下拉列表請選擇的情況躏救,則直接動態(tài)將軟鍵盤隱藏
// llRole任意給控件即可,一般對應寫入螟蒸,不可為空 KeyboardUtil是一個軟鍵盤工具類
KeyboardUtil.hideKeyboard(llRole);
軟鍵盤工具類代碼如下:
/**
* 軟鍵盤工具類
*/
public class KeyboardUtil {
public static void showKeyboard(final View view) {
view.requestFocus();
InputMethodManager inputManager =
(InputMethodManager) view.getContext().getSystemService(
Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(view, 0);
}
public static void hideKeyboard(final View view) {
InputMethodManager imm =
(InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
public static boolean isKeyBoardActive(final Context context) {
//獲取當屏幕內(nèi)容的高度
int screenHeight = ((Activity)context).getWindow().getDecorView().getHeight();
//獲取View可見區(qū)域的bottom
Rect rect = new Rect();
//DecorView即為activity的頂級view
((Activity)context).getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
//考慮到虛擬導航欄的情況(虛擬導航欄情況下:screenHeight = rect.bottom + 虛擬導航欄高度)
//選取screenHeight*2/3進行判斷
return screenHeight*2/3 > rect.bottom;
}
}