【问题标题】:Android: How to turn off IME for an EditText?Android:如何关闭 EditText 的 IME?
【发布时间】:2011-05-07 02:19:53
【问题描述】:

如何关闭 EditText 的 IME 功能?

或者:如何避免显示 IME 键盘?

我有一个布局,我的特殊键盘位于EditText 下方,因此无需显示 IME。请理解,我无法将我的键盘实现为 IME,因为它是特定于 EditText 的,并且在任何其他上下文中使用它只会导致问题。

我尝试使用

getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

在活动的onCreate() 中,但在这种情况下似乎没有任何作用。

【问题讨论】:

  • 是否允许此自定义 EditText 从硬件键盘获取输入?如果不是,即如果它仅由您的自定义软件键盘控制,那么它可能根本不应该是可编辑的......
  • @reuben:嗯,这就是问题所在。用户不应局限于软键盘。他/她也应该可以通过点击EditText 进行导航,因为文本的长度不受限制。

标签: android keyboard android-softkeyboard


【解决方案1】:

我想我找到了一种方法……子类 EditText 并覆盖 onCheckIsTextEditor() 以返回 false:

public class EditTextEx extends EditText {

    public EditTextEx(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override 
    public boolean onCheckIsTextEditor() {
        return false;
    }       
}

我已经测试过了,我根本无法显示软键盘。

【讨论】:

  • 是的,太棒了!你是第一个回答我四个问题中的任何一个的人。恭喜:)
  • editText.setInputType(EditorInfo.TYPE_NULL); 效果一样
【解决方案2】:
editText.setInputType(EditorInfo.TYPE_NULL);

【讨论】:

  • 这确实会禁用光标。
【解决方案3】:

在尝试让它工作的同时,我也尝试过:

inputField.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
        }
    });

inputField.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent event) {
        getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
        return false;
    }
});

两者都被调用,但都不隐藏 IME 弹出窗口。

【讨论】:

    猜你喜欢
    • 2015-04-06
    • 2011-01-23
    • 2016-03-08
    • 2021-01-24
    • 2018-02-10
    • 2012-10-25
    • 2021-12-03
    • 2013-01-01
    • 1970-01-01
    相关资源
    最近更新 更多