android:windowSoftInputMode
activity主窗口與軟鍵盤的交互模式,可以用來避免輸入法面板遮擋問題。
這個屬性能影響兩件事情:【一】當有焦點產生時,軟鍵盤是隱藏還是顯示
【二】是否減少活動主窗口大小以便騰出空間放軟鍵盤
【1】stateUnspecified:軟鍵盤的狀態並沒有指定,系統將選擇一個合適的狀態或依賴於主題的設置
【2】stateUnchanged:當這個activity出現時,軟鍵盤將一直保持在上一個activity裏的狀態,無論是隱藏還是顯示
【3】stateHidden:用戶選擇activity時,軟鍵盤總是被隱藏
【4】stateAlwaysHidden:當該Activity主窗口獲取焦點時,軟鍵盤也總是被隱藏的
【5】stateVisible:軟鍵盤通常是可見的
【6】stateAlwaysVisible:用戶選擇activity時,軟鍵盤總是顯示的狀態
【7】adjustUnspecified:默認設置,通常由系統自行決定是隱藏還是顯示
【8】adjustResize:該Activity總是調整屏幕的大小以便留出軟鍵盤的空間
【9】adjustPan:當前窗口的內容將自動移動以便當前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內容的部分
【10】adjustNothing:當前窗口的內容將自動移動以便當前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內容的部分這設置的值(除"stateUnspecified"和"adjustUnspecified"以外)將覆蓋在主題中設置的值
進入界面就彈出鍵盤:
設置EditText獲取焦點
android:focusableInTouchMode="true"
設置Activity windowSoftInputMode屬性:
android:windowSoftInputMode="stateVisible|stateAlwaysVisible|adjustResize"
監聽ListView滾動
vListView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(SCROLL_STATE_TOUCH_SCROLL == scrollState){
Utils.hideSoftInput(vListView);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
});
工具類
/**
* 隱藏軟鍵盤
*
* @param v
*/
public static void hideSoftInput(View v) {
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);
}
}
public static void showSoftInput(View v) {
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (!imm.isActive()) {
imm.showSoftInput(v, InputMethodManager.SHOW_FORCED);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}
}