【Android】Android-鍵盤遮蓋介面佈局問題
阿新 • • 發佈:2018-12-18
一、在解決Android輸入法鍵盤彈出問題是,我們先來了解幾個常用的api
-
<activity android:windowSoftInputMode= "A"'>
- A=“stateUnspecified” 依賴系統或者主題去設定鍵盤彈出
- A=“stateHidden” 控制鍵盤不自動彈出
- A=“stateUnchanged” 保持上一個Activity的鍵盤彈出屬性設定
- A=“stateAlwaysHidden” 當Activity主視窗獲取焦點時,軟鍵盤一直隱藏
- A=“stateVisible” 在沒有輸入框的情況下也可點選彈出鍵盤
- A=“stateAlwaysVisible” 總是顯示狀態
- A=“adjustUnspecified” 預設設定,可能遮擋內容,比較死板
- A=“adjustResize” 自動調整
螢幕大小
,留足軟鍵盤空間 - A=“adjustPan” 系統通過
佈局移動
來調節使用者佈局,保證輸入框一直在視野範圍內
-
<activity android:configChanges="B">
- B=“keyboard” 鍵盤模式發生變化,當需要呼叫自定義鍵盤時使用
- B=“keyboardHidden” 開啟手機自帶鍵盤 鍵盤的可用性發生了改變
- B=“orientation” 橫豎屏切換
- B=“fontScale” 全域性字型發生變化
- B=“ScreenSize” 螢幕大小變化
二、這次的問題是,一個表單填寫,鍵盤擋住下方輸入框,每次都得關閉鍵盤從新點選輸入
-
解決–首先在清單檔案裡 activity 中標註:
<activity android:name="****Activity" android:configChanges="keyboardHidden|orientation|screenSize" android:windowSoftInputMode="stateHidden|adjustResize" />
-
用scrollview包裹布局,並設定鍵盤遮擋的最後一個EditView控制元件的監聽事件
lastEdit.addTextChangedListener(new TextWatcher() {
@Override public void onTextChanged(CharSequence s, int start, int before, int count) { scrollow.fullScroll(ScrollView.FOCUSABLES_ALL); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } });
3.擴張:隱藏鍵盤的方法:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// 獲得當前得到焦點的View
View view = getCurrentFocus();
IBinder token=view.getWindowToken();
InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
return super.dispatchTouchEvent(ev);
}
4.具體什麼時候隱藏,可同夥訊息傳遞機制或者點選事件去控制