【问题标题】:Disabling the send button when the EditText is empty when using imeOption= actionSend使用 imeOption= actionSend 时 EditText 为空时禁用发送按钮
【发布时间】:2014-04-24 17:33:55
【问题描述】:

当文本为空时,我们想禁用按钮(这是在纵向模式下设置的方式)有什么想法吗?

编辑:我不认为这很清楚,但我可以启用/禁用我自己的按钮.. 但是当使用横向模式时,当键盘弹出时,屏幕被一个带有它自己的按钮的 android 特定文本区域覆盖(因此是imeOption)所以我没有问题启用/禁用我拥有的按钮..当文本区域为空时,我想禁用这个Android按钮..

【问题讨论】:

  • 如果需要,您可以设置可见性 View.INVISIBLE 并覆盖 onconfigurationChange 再次设置其状态
  • 我如何处理那个发送按钮。它是一个操作系统渲染的按钮。我认为屏幕超出了我的活动范围。
  • 启用/禁用我自己的按钮没有问题。这是 android 呈现的按钮。

标签: android android-ui


【解决方案1】:

添加一个TextChangedListener,只要EditText 中的文本发生更改,就会调用它。

message.addTextChangedListener(new TextWatcher() {

    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
    public void onTextChanged(CharSequence s, int start, int before, int count) {}

    public void afterTextChanged(Editable s) {
        if (s == null || s.length() == 0) {
           send.setEnabled(false);
           message.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION);
        }
        else {
          send.setEnabled(true);
          message.setImeOptions( /* whatever you previously had */ );
        }
}

或者,您也可以让您的类实现TextWatcher 接口,这会使代码更简洁。

public class MyDialogFragment implements TextWatcher { ... }

【讨论】:

  • 嘿,由于某种原因,这不起作用,但它让我走上了正确的道路。我看到了该发送按钮的操作位置,如果文本字段为空,则基本上什么都不做
  • 您可能必须以某种方式触发键盘刷新才能使 ime 选项生效(隐藏和显示?)。另一个好技巧是在字符串的临时副本上调用 trim() (或使用删除空格的正则表达式),然后检查长度 - 确保您发送的消息不只是空格
  • @FunkTheMonk 据我了解您的答案,我可以使用afterTextChanged() 显示和隐藏软键盘的DONE 按钮。正确的?我还尝试禁用/启用NEXT 按钮但没有成功。你会怎么做?
  • @JJD 已经有一段时间了,据我记得你应该能够显示和隐藏任何输入操作(搜索、下一步、输入等)。但是我已经看到了忽略输入操作标志的设备/版本的制造商 UI(sense、touchwiz 等) - 在另一台设备上尝试。您还可以尝试隐藏和重新显示键盘,或以某种方式重新初始化它 - 可能 InputMethodService.onConfigurationChanged 使用当前配置(来自资源)
  • @FunkTheMonk 谢谢你的建议。我猜我会延迟实现该功能。模拟器显示NEXTDONE 按钮,但三星S1 没有。
猜你喜欢
  • 2022-06-12
  • 1970-01-01
  • 2016-05-13
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多