use*_*927 5 android focus popup android-edittext
我有一个简单的“命令对话框”,它是一个包含 EditText 和几个按钮的 PopupWindow。我想要以下行为:
我的 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>
Run Code Online (Sandbox Code Playgroud)
弹出式结构如下所示:
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()
Run Code Online (Sandbox Code Playgroud)
似乎发生了竞争条件。我连接了一个硬件键盘,有两种方法可以打开弹出窗口:
每当我按下按钮打开弹出窗口时,EditText 都会获得焦点,每个人都很高兴。
每当我通过按硬件键盘上的 Enter 键打开弹出窗口时,EditText 都会短暂获得焦点,然后变得不聚焦。我怀疑没有证据表明 PopupWindow 正在窃取焦点。
我需要弹出窗口是可聚焦的——否则按键只会转到活动,在那里很难将它们路由回 EditText。
我还需要弹出窗口是 externalTouchable,所以当你触摸它外面时它会消失。
我试过将 isTouchable 设置为 false,但似乎没有任何效果。
我尝试了各种与此问题相关的奇怪建议,例如调用 popup.update() 等。没有什么能解决问题。
同样,这仅在我通过按 Enter 键打开弹出窗口时发生。我能看到的唯一区别是,在我创建弹出窗口之前,Activity 可能会暂时获得焦点,而如果我按下 UI 按钮打开弹出窗口,则 Activity 永远不会获得键盘焦点。不过不确定。
那唯一已经为我工作是设置一个计时器:
android.os.Handler().postDelayed({ editText.requestFocus() }, 250)
Run Code Online (Sandbox Code Playgroud)
这确实有效,但显然是跛脚和脆弱的。
知道如何防止我的弹出窗口从其中的 EditText 窃取焦点吗?
Raj*_*har -1
找到解决方案
final PopupWindow popUp = new PopupWindow(vbl.getMainLayout());
....
popUp.setFocusable(true);
popUp.update();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1059 次 |
| 最近记录: |