将光标定位在Android应用程序上不可编辑的EditText中

时间:2017-07-22 06:48:22

标签: android android-edittext uitextposition

我一直在阅读帖子中的答案 How to set cursor position in EditText? 我的EditText中确实存在一个特定问题,这可能是导致问题的原因。在我的xml布局中,我定义了一个名为“edit”的EditText,其 inputType = none 。根据android开发者文档,如果inputType = none,则文本不可编辑。之所以会出现“无”,这就是我阻止Android通用键盘弹出我的用户界面的方式,这非常有效。 我想做这样的事情:用户输入:5 + sin(),现在光标editText光标位置应该在符号后面,但是由于inputType = none,所以没有显示光标。我需要做的是移动下一个文本输入放在()符号之间的位置。会发生的是下一个文本输入正好在符号后面。 所以如果下一个文本输入是4,那么:5 + sin()4,我不想要这个。我更喜欢以下内容:5 + sin(4)

我使用的是定制键盘,按键“()”。这是我尝试过的,没有任何成功:

//once the user presses the "( )" button:
Selection.setSelection(edit.getText(),edit.getText().length() - 2);

我尝试过的另一种方式:

//once the user presses the "( )" button:
edit.setInputType(InputType.TYPE_CLASS_NUMBER);
edit.setSelection(edit.getText().length() - 2);
edit.setInputType(InputType.TYPE_NULL);

这两种方式都没有对我有用。我还尝试将editText的inputType设置为xml文件中除“none”之外的其他内容。但是,Android键盘弹出我的自定义键盘。

任何想法或想法都会有所帮助

1 个答案:

答案 0 :(得分:1)

我不知道你的()按钮究竟是如何工作的,但你可以尝试一下这个。

yourEditText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            if( s.length()>0 && s.charAt(s.length()-1) == ')' ){
            yourEditText.setSelection(s.length()-1);
            }

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });