【问题标题】:how to block virtual keyboard while clicking on edittext in android?在android中单击edittext时如何阻止虚拟键盘?
【发布时间】:2009-12-04 06:52:39
【问题描述】:

如何在android中点击edittext时阻止virtual keyboard

【问题讨论】:

    标签: android


    【解决方案1】:

    Here 是一个可以为您提供所需内容的网站。

    总而言之,它提供了来自 Android 开发者的 InputMethodManagerView 的链接。它将引用ViewhideSoftInputFromWindow() 内部的getWindowToken InputMethodManager

    链接中给出了更好的答案,希望对您有所帮助。

    编辑

    从上面发布的链接中,这里有一个使用 onTouch 事件的示例:

    editText_input_field.setOnTouchListener(otl);
    
    private OnTouchListener otl = new OnTouchListener() {
        public boolean onTouch (View v, MotionEvent event) {
                return true; // the listener has consumed the event
        }
     };
    

    这是来自同一网站的另一个示例。这声称有效,但似乎是个坏主意,因为您的 EditBoxNULL,它将不再是编辑器:

    MyEditor.setOnTouchListener(new OnTouchListener(){
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int inType = MyEditor.getInputType(); // backup the input type
        MyEditor.setInputType(InputType.TYPE_NULL); // disable soft input
        MyEditor.onTouchEvent(event); // call native handler
        MyEditor.setInputType(inType); // restore input type
        return true; // consume touch event
    }
    });
    

    希望这会为您指明正确的方向

    【讨论】:

    • 在尝试了 5+ 其他建议后,终于找到了可行的解决方案。
    • @JohnyTex 我没有尝试过建议的解决方案,但我会看看下面的答案(例如,stackoverflow.com/a/12950947/166712)是否能解决这个问题。
    • 试过了,但我不明白那个解决方案。
    • 如果您使用数据绑定,请将其添加到您的 EditText 布局中:android:onTouch="@{() -> true}"
    • @Thilaw Brics 如果您粘贴了您的布局,我很乐意为您提供帮助。可能值得创建一个单独的问题。
    【解决方案2】:

    更简单的方法是将编辑文本的焦点属性设置为false。在您的 EditText 的 XML 集中 android:focusable="假"

    【讨论】:

    • 谢谢!对我来说最好的解决方案,因为我只想在用户单击 EditText 时显示时间/日期选择器!
    • @Symfony Dev 很抱歉,但您仍然可以长按 edittext 并编辑它们。检查 Anthony 的答案,因为它是正确的解决方案。
    【解决方案3】:

    另一种更简单的方法是将android:focusableInTouchMode="false" 行添加到您的EditText 的xml 中。希望这可以帮助。

    【讨论】:

      【解决方案4】:

      对于光标定位,您可以使用Selection.setSelection(...),我刚刚尝试过,它成功了:

      final EditText editText = (EditText) findViewById(R.id.edittext);
      editText.setOnTouchListener(new View.OnTouchListener() {
           @Override
           public boolean onTouch(View view, MotionEvent motionEvent) {
      
               //change the text here
      
               Selection.setSelection(editText.getText(), editText.length());
               return true;
           }
      });
      

      【讨论】:

      • 我不明白你在这里更改文本的意思。您介意进一步解释吗?
      • 我很难看到这会将光标放在末尾以外的任何其他位置,但我不知道...?
      【解决方案5】:

      最好的方法是将 EditText 中的标志 textIsSelectable 设置为 true。这将为 EditText 永久隐藏软键盘,但也将提供保留光标的额外好处,您将能够选择/复制/剪切/粘贴。

      你可以像这样在你的xml布局中设置它:

      <EditText
          android:textIsSelectable="true"
          ...
      />
      

      或者以编程方式,像这样:

      EditText editText = (EditText) findViewById(R.id.editText);
      editText.setTextIsSelectable(true);
      

      对于使用 API 10 及以下版本的任何人,此处提供 hack:https://stackoverflow.com/a/20173020/7550472

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-05
        • 2013-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-12
        相关资源
        最近更新 更多