我在tabhost中顯示EditText。 Tabhost在SherlockFragmentActivity中。當活動中出現TabHost時,EditText使用硬鍵盤失去焦點
假設我處於觸摸模式,並且我點擊EditText使其焦點並開始鍵入它。輸入2-3個字符後,我決定使用我的硬鍵盤。只要按下第一個硬鍵,我就移出觸摸模式,這也會導致焦點移回到當前選定的選項卡。只要我不使用硬導航鍵將焦點帶回到我的EditText,我將無法輸入EditText。
僅當TabHost不在TabActivity內部時,纔會導致此問題。
重現此問題的快速示例代碼可能是 - ActionBarSherlock示例代碼的FragmentTabs活動。選擇CustomTab並嘗試使用硬鍵盤在操作欄中的搜索視圖內鍵入任何文本。看到焦點簡單地移動到選項卡。
問題可以在android 2.2,4.0上重現,也可以使用ICS仿真器。
有沒有人有更多的信息。關於這個問題?
(一種解決方法似乎是這裏所說的:https://stackoverflow.com/a/8684025/333137但它看起來像一個黑客)
感謝。
編輯:經過更多調查, 我發現了TabHost類中的setup()函數,只有在TabAost內部沒有使用TabHost時才需要調用它。 它註冊了一個只有在按下硬鍵時才接收回調的按鍵監聽器。
void setup(){
// KeyListener to attach to all tabs. Detects non-navigation keys
// and relays them to the tab content.
mTabKeyListener = new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_ENTER:
return false;
}
**mTabContent.requestFocus(View.FOCUS_FORWARD);**
return mTabContent.dispatchKeyEvent(event);
}
我不知道爲什麼它被調用requestFocus的(View.FOCUS_FORWARD),但這不會將焦點設置到EditText上裏面(這是它應該?)。另外,如果在操作欄中搜索視圖,則完全在標籤外部。
請參閱這篇文章。 http://stackoverflow.com/questions/6006518/hard-keyboard-fail-to-focus-edittext – Hank
感謝true_cp,我在上面的qn中提到過這篇文章。這似乎是一個黑客,並不會在我的情況下工作。 –