Android 使用imeOption=actionSend时,当EditText为空时禁用发送按钮

Android 使用imeOption=actionSend时,当EditText为空时禁用发送按钮,android,android-ui,Android,Android Ui,当文本为空时,我们想禁用按钮(这是在纵向模式下设置的)有什么想法吗 编辑:我认为不清楚,但我可以启用/禁用我自己的按钮。。但是,当使用横向模式时,当键盘弹出时,屏幕被android特定的文本区域覆盖,并有自己的按钮(因此有IME选项),因此启用/禁用按钮没有问题。。当文本区域为空时,我要禁用的就是这个Android按钮。添加TextChangedListener,每当EditText中的文本发生更改时,就会调用该按钮 message.addTextChangedListener(new Text

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


编辑:我认为不清楚,但我可以启用/禁用我自己的按钮。。但是,当使用横向模式时,当键盘弹出时,屏幕被android特定的文本区域覆盖,并有自己的按钮(因此有IME选项),因此启用/禁用按钮没有问题。。当文本区域为空时,我要禁用的就是这个Android按钮。

添加
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 { ... }

您可以设置可见性View.INVISIBLE并覆盖onconfigurationChange,如果需要,可以重新设置其状态如何获取发送按钮的句柄。。这是一个操作系统渲染按钮。。我认为该屏幕超出了我的活动范围..启用/禁用我自己的按钮没有问题。。这是安卓渲染按钮。嘿,出于某种原因,这不起作用,但它有点引导我走上正确的道路。。我看到了对发送按钮采取的操作,如果文本字段为空,则基本上什么也不做。很可能您必须以某种方式触发键盘刷新,以便ime选项生效(隐藏和显示?)。另一个好技巧是在字符串的临时副本上调用trim()(或者使用一个删除空白的regax),然后检查长度——确保您不会只发送一条消息whitespace@FunkTheMonk就我理解你的回答而言,我可以使用
posterextchanged()
来显示和隐藏软键盘的
DONE
按钮。对吗?我还尝试禁用/启用了
NEXT
按钮,但没有成功。你会怎么做?@JJD已经有一段时间了,据我记忆所及,你应该能够显示和隐藏任何输入操作(搜索、下一步、输入等)。但我见过一些设备/版本的UI(sense、touchwiz等),它们忽略了输入操作标志——请在另一台设备上试用。您也可以尝试隐藏和重新显示键盘,或者以某种方式重新初始化它-可能是InputMethodService.onConfiguration使用当前配置(来自参考资料)@funkthemank谢谢您的建议。我想我会推迟实现这个特性。emulator会显示
NEXT
DONE
按钮,但三星S1不会。