gpt4 book ai didi

android - 我的 PopupWindow 不断窃取 EditText 的焦点

转载 作者:行者123 更新时间:2023-12-02 06:26:36 24 4
gpt4 key购买 nike

我有一个简单的“命令对话框”,它是一个包含 EditText 和几个按钮的 PopupWindow。我想要以下行为:

  • 触摸弹出窗口外部会将其关闭
  • 当弹出窗口出现时,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()

似乎出现了竞争状况。我已连接硬件键盘,有两种方法可以打开弹出窗口:

  1. 我可以按 Activity 注意到的 Enter 键,然后调用该函数来构造并显示弹出窗口。
  2. 我可以按 UI 中的按钮来调用相同的函数。

每当我按下按钮打开弹出窗口时,EditText 就会获得焦点,每个人都很高兴。

每当我通过按硬件键盘上的 Enter 键打开弹出窗口时,EditText 都会短暂获得焦点,然后变得失去焦点。在没有证据的情况下,我怀疑 PopupWindow 正在窃取焦点。

我需要弹出窗口可聚焦 - 否则按键只会转到 Activity,在那里很难将它们路由回 EditText。

我还需要弹出窗口是可触摸的,这样当您触摸它的外部时它就会消失。

我尝试将 isTouchable 设置为 false,但似乎没有效果。

我尝试了与此问题相关的各种奇怪建议,例如调用 popup.update() 等。什么都没有解决问题。

同样,这种情况发生在我通过按 Enter 键打开弹出窗口时。我能看到的唯一区别是,也许 Activity 在创建弹出窗口之前暂时获得焦点,而如果我按 UI 按钮打开弹出窗口,则 Activity 永远不会获得键盘焦点。但不确定。

唯一对我有用的就是设置一个计时器:

    android.os.Handler().postDelayed({ editText.requestFocus() }, 250)

这确实有效,但显然很蹩脚且脆弱。

知道如何防止我的弹出窗口从其中的 EditText 窃取焦点吗?

最佳答案

寻找解决方案

final PopupWindow popUp = new PopupWindow(vbl.getMainLayout());
....
popUp.setFocusable(true);
popUp.update();

关于android - 我的 PopupWindow 不断窃取 EditText 的焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43486021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com