1. 程式人生 > >【Android】Android-鍵盤遮蓋介面佈局問題

【Android】Android-鍵盤遮蓋介面佈局問題

一、在解決Android輸入法鍵盤彈出問題是,我們先來了解幾個常用的api

  1. <activity android:windowSoftInputMode= "A"'>

    • A=“stateUnspecified” 依賴系統或者主題去設定鍵盤彈出
    • A=“stateHidden” 控制鍵盤不自動彈出
    • A=“stateUnchanged” 保持上一個Activity的鍵盤彈出屬性設定
    • A=“stateAlwaysHidden” 當Activity主視窗獲取焦點時,軟鍵盤一直隱藏
    • A=“stateVisible” 在沒有輸入框的情況下也可點選彈出鍵盤
    • A=“stateAlwaysVisible” 總是顯示狀態
    • A=“adjustUnspecified” 預設設定,可能遮擋內容,比較死板
    • A=“adjustResize” 自動調整螢幕大小,留足軟鍵盤空間
    • A=“adjustPan” 系統通過佈局移動來調節使用者佈局,保證輸入框一直在視野範圍內
  2. <activity android:configChanges="B">

    • B=“keyboard” 鍵盤模式發生變化,當需要呼叫自定義鍵盤時使用
    • B=“keyboardHidden” 開啟手機自帶鍵盤 鍵盤的可用性發生了改變
    • B=“orientation” 橫豎屏切換
    • B=“fontScale” 全域性字型發生變化
    • B=“ScreenSize” 螢幕大小變化

二、這次的問題是,一個表單填寫,鍵盤擋住下方輸入框,每次都得關閉鍵盤從新點選輸入

  1. 解決–首先在清單檔案裡 activity 中標註:

     <activity android:name="****Activity" 
         android:configChanges="keyboardHidden|orientation|screenSize"
         android:windowSoftInputMode="stateHidden|adjustResize" />
    
  2. 用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.具體什麼時候隱藏,可同夥訊息傳遞機制或者點選事件去控制