Android 如何在editText的末尾添加常量不可编辑文本?

Android 如何在editText的末尾添加常量不可编辑文本?,android,email,android-edittext,textview,Android,Email,Android Edittext,Textview,我正在尝试实现一个注册屏幕,其中两个文本输入布局中有两个editext(一个用于电子邮件,一个用于密码)。但是,对于电子邮件,我希望域有一个恒定的文本。我有没有办法将文本设置为保留在编辑文本的末尾或其他更好的建议?这里的Email是一个提示,我希望用户能够仅在开始时键入,@example.com保持不变 以下是更新后的解决方案 emailEditText.setText("@gmail.com"); emailEditText.setSelection(0); email

我正在尝试实现一个注册屏幕,其中两个
文本输入布局中有两个
editext
(一个用于电子邮件,一个用于密码)。但是,对于电子邮件,我希望域有一个恒定的文本。我有没有办法将文本设置为保留在编辑文本的末尾或其他更好的建议?这里的Email是一个提示,我希望用户能够仅在开始时键入,@example.com保持不变


以下是更新后的解决方案

    emailEditText.setText("@gmail.com");
    emailEditText.setSelection(0);
    emailEditText.requestFocus();
    emailEditText.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            switch (event.getAction()) {
                case MotionEvent.ACTION_MOVE:

                    Layout layout = ((EditText) v).getLayout();
                    float x = event.getX() + emailEditText.getScrollX();
                    offset = layout.getOffsetForHorizontal(0, x);
                    maxOffset = emailEditText.getText().toString().indexOf("@");

                    break;

                case MotionEvent.ACTION_UP:

                    if(offset > maxOffset && maxOffset >= 0) {

                        emailEditText.setSelection(maxOffset);
                    }
                    else if (offset >= 0) {
                        emailEditText.setSelection(offset);
                    }

                    event.setAction(MotionEvent.ACTION_CANCEL);

                    showSoftKeyBoard(emailEditText);
            }
            return false;
        }
    });

    public void showSoftKeyBoard(View focusedView) {
    if(getCurrentFocus() != null) {
        ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
                .showSoftInput(focusedView, InputMethodManager.SHOW_IMPLICIT);
    }
}

最后是免责声明。。。您可以在光标周围移动,但在光标底部通常看不到支架。

您可以使用此库,我已经工作过了


您可以尝试以下方法之一:

1) 在水平线性布局中,放置包含域名的textInputLayout(width=wrap\u content)和textView(width=0dp&weight=1)。每当电子邮件edittext收到焦点时,显示文本视图,否则隐藏它

2) 向edittext添加文本观察程序,并在AfterTextChanged方法中将域名添加到字符串中。在这里,您必须检查edittext的字符串是否以域名结尾。。。如果没有,则只添加域名,否则不添加域名。就个人而言,这不是一个优雅的解决方案,因为在文本更改后,光标不会位于预期位置


谢谢

我已经研究过了,但是我没能把文章放在最后。@riadrifai我的错!我误读了你的问题,我会在一段时间内更新我的答案。好的,谢谢。我会尽快尝试你的第一个建议。至于第二个问题,我将ditText中的字符数限制为域前电子邮件的字符数,因为我已经知道(在我的情况下为5),您认为这会使使用textWatcher更容易吗?如果您将editText中的字符数限制设置为5。那么您认为您的域名会在其中可见吗?限制是用户插入的文本,即我只允许他键入5个字符。与Visibility无关如果将maxLength设置为5,则用户只能键入5个字符。但是,如果以编程方式向其添加更多字符,那么也只有5个可见。好的,我明白你的意思,我将尝试第一个选项,谢谢