軟鍵盤的顯示和隱藏監聽,在項目中大大小小都會需要,雖然網上也有很多例子,這裏是給使用的時候一些注意
首先了解下軟鍵盤使用的模式的:
【A】stateUnspecified:軟鍵盤的狀態並沒有指定,系統將選擇一個合適的狀態或依賴於主題的設置
【B】stateUnchanged:當這個activity出現時,軟鍵盤將一直保持在上一個activity裏的狀態,無論是隱藏還是顯示
【C】stateHidden:用戶選擇activity時,軟鍵盤總是被隱藏
【D】stateAlwaysHidden:當該Activity主窗口獲取焦點時,軟鍵盤也總是被隱藏的
【E】stateVisible:軟鍵盤通常是可見的
【F】stateAlwaysVisible:用戶選擇activity時,軟鍵盤總是顯示的狀態
【G】adjustUnspecified:默認設置,通常由系統自行決定是隱藏還是顯示
【H】adjustResize:該Activity總是調整屏幕的大小以便留出軟鍵盤的空間
【I】adjustPan:當前窗口的內容將自動移動以便當前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內容的部分
這裏我們要監聽頁面的變化需要在AndroidManifes的該activity配置adjustResize這個屬性:android:windowSoftInputMode="adjustResize"
//用於軟鍵盤的監聽,這個是activity根佈局
private View root_layout;
//屏幕高度
private int screenHeight = 0;
//軟件盤彈起後所佔高度閥值
private int keyHeight = 0;
//獲取屏幕高度
screenHeight = this.getWindowManager().getDefaultDisplay().getHeight();
//閥值設置爲屏幕高度的1/3
keyHeight = screenHeight/3;
root_layout.addOnLayoutChangeListener(this);
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
LogUtil.debugE("now",left+"-"+top+"-"+right+"-"+bottom);
LogUtil.debugE("old",oldLeft+"-"+oldTop+"-"+oldRight+"-"+oldBottom);
if (oldBottom != 0 && bottom != 0 && (oldBottom - bottom > 0)) {
Toast.makeText(PersonalMsgActivity.this, "監聽到軟鍵盤彈起...", Toast.LENGTH_SHORT).show();
} else if (oldBottom != 0 && bottom != 0 && (bottom - oldBottom > 0)) {
Toast.makeText(PersonalMsgActivity.this, "監聽到軟件盤關閉...", Toast.LENGTH_SHORT).show();
}
}
但是我在我手機上測試有個問題:
當這個editview控件首次獲取焦點的時候,editview會被往上頂,也就是界面壓縮了,按下軟鍵盤的隱藏鍵,隱藏後,第二次再去點擊,就被完全擋住了,這可能是焦點還在,
但發現還是不能解決我的問題.本來想通過監聽軟鍵盤的顯示和隱藏,來處理editview的焦點事件,隱藏就讓它失去焦點,顯示就讓顯示焦點,
最後發現使用直接使用scrollview就可以搞定了,不用這麼複雜.不過我還是迷迷糊糊.