【问题标题】:Hiding the soft keyboard when typing in EditText in Android 4在 Android 4 中输入 EditText 时隐藏软键盘
【发布时间】:2012-10-30 15:07:58
【问题描述】:

我正在为 Android 编写一个计算器,我使用 EditText 输入表达式。在创建按钮时 - 我不需要软件键盘,但我想更改光标位置、文本选择、复制、粘贴。总之-一切照原样,只有虚拟键盘不显示。 在 2.3 版中,我可以写:

EditText.setInputType (InputType.TYPE_NULL);

而且效果很好。在版本 4 中光标不显示,菜单不起作用等。尝试了一堆方法 - 不能移动光标,显示键盘,但从未真正解释过。

InputMethodManager imm = (InputMethodManager)getSystemService(
    Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); //cursor not showing
------------------------------------------------------------------------
getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); //not working

我想让它像 Panecal、MobiCalc Free、Scientific Calculator 一样。我会很高兴有任何有用的建议。 附言对不起我的英语。

【问题讨论】:

    标签: android android-edittext calculator virtual-keyboard


    【解决方案1】:

    从下面发布的链接中,这是一个在触摸时使用 Edittext 的示例

    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
        }
     };
    

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

    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 even
       }
    });
    

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

    以上答案取自-how to block virtual keyboard while clicking on edittext in android?

    这也可能有效 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

    【讨论】:

    • 在第一种情况下键盘是隐藏的,光标在闪烁,但我不能移动它;第二种情况相同,但光标设置在表达式的开头;第三种情况完全没有效果。感谢您提供帮助。
    • 如果你谷歌如何阻止软键盘出现,你会得到更多的结果
    【解决方案2】:

    对此的确切解决方案是将 EditText 中的标志 textIsSelectable 设置为 true。这将保留光标,您将能够使用基本的选择/复制/剪切/粘贴等功能。您可以像这样在 xml 布局中设置它:

    您可以像这样以编程方式设置它:

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

    或者在你的 XML 布局中:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 2014-12-13
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多