在Android 4中,在EditText中输入时隐藏软键盘

3
我正在为Android编写计算器,使用EditText输入表达式。当我创建按钮时,不需要软键盘,但是我想要更改光标位置、文本选择、复制和粘贴。总之,所有的操作都像原来一样,只是虚拟键盘不会显示。 在2.3版本中,我可以这样写:
EditText.setInputType (InputType.TYPE_NULL);

它在之前的版本中完美运行。但是在第四个版本中,光标不会显示,菜单也无法工作等问题。尝试了很多方法,但都不能移动光标,键盘也会显示,从未有人真正解释过。

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

我希望我的IT技术相关内容能像Panecal、MobiCalc Free和Scientific Calculator一样出色。如果有任何有用的建议,我会非常感激。

P.S. 对于我的英语,我很抱歉。

2个回答

2
从下面贴出的链接中,这里有一个关于在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
   }
});

希望这能指引你正确的方向

以上答案来自于 - 如何在Android中点击EditText时阻止虚拟键盘?

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


在第一种情况下,键盘被隐藏,光标闪烁,但我无法移动它;第二种情况相同,但光标设置在表达式的开头;第三种情况完全没有任何影响。谢谢您的帮助。 - user1814546
如果你在谷歌上搜索如何停止软键盘弹出,你会得到更多的结果。 - jcw

0

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

您也可以通过编程方式设置它:

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

或者在你的 XML 布局中:

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

对于使用API 10及以下版本的任何人,这里提供了一个hack:https://dev59.com/4mUp5IYBdhLWcg3wmIUt#20173020


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接