我有一個簡單的「命令對話框」,它是一個包含EditText和幾個按鈕的PopupWindow。我想以下行爲:我的PopupWindow不斷竊取我的EditText的焦點
彈出窗外- 觸摸遣散它
- 當彈出窗口出現時,EditText上應該抓住(並保持)焦點
我的EditText上看起來是這樣的:
<EditText
android:id="@+id/send_cmd_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="1"
android:hint="@string/send_cmd_hint"
android:textColor="#FFFFFF"
android:minEms="100"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:textColorHint="#BBBBBB"
android:inputType="text"
android:imeOptions="actionSend" >
<requestFocus />
</EditText>
彈出建設看起來是這樣的:
val popup = PopupWindow(view)
popup.isOutsideTouchable = true
popup.isTouchable = true
popup.isFocusable = true
popup.contentView = view
// This bizarre hack allows outside touching to dismiss it.
popup.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
sendButton.setOnClickListener {
sendCommand()
popup.dismiss()
}
if (A.isHardwareKeyboardAvailable()) {
// This only fires for the hardware keyboard.
editText.setOnKeyListener { _, code, event -> handleKey(code, event) }
} else {
setImeListener()
}
editText.requestFocus()
似乎有一個競爭條件發生。我有附加硬件鍵盤,有兩種方法可以打開彈出:
- 我打回車鍵後,該活動通知,然後調用構造和顯示彈出的功能。
- 我可以在我的用戶界面中按下一個按鈕,調用相同的功能。
每當我按下按鈕打開彈出窗口,EditText就會獲得焦點,每個人都很開心。
每當我按下我的硬件鍵盤上的Enter鍵打開彈出窗口時,EditText會短暫地獲得焦點,然後變得不專心。我懷疑沒有證據證明PopupWindow正在偷竊焦點。
我需要彈出窗口是可以聚焦的 - 否則按鍵只是轉到活動,在那裏很難將它們路由回EditText。
我還需要彈出窗口才能觸摸到外面,所以當你在外面觸摸時它會消失。
我試過設置isTouchable爲false,但它似乎沒有任何效果。
我已經嘗試了各種古怪的建議,我發現這個問題,如調用popup.update()等相關。沒有什麼解決了這個問題。
同樣,這個只有發生在按下Enter鍵打開彈出窗口時。唯一的區別是我可以看到,Activity可能會在創建彈出窗口之前暫時獲得焦點,而如果我按下UI按鈕打開彈出窗口,則Activity將永遠不會獲得鍵盤焦點。不知道,但。
是有爲我工作的唯一事情是設置一個計時器:
android.os.Handler().postDelayed({ editText.requestFocus() }, 250)
這是卓有成效的,但顯然是瘸腿的,脆弱的。
任何想法如何防止我的彈出窗口從其中的EditText偷取焦點?
我不知道爲什麼你認爲這能解決我的問題。我的問題具體說我試過popup.update(),它不起作用。它已經成爲焦點。 – user3562927