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

时间:2016-08-12 12:59:37

标签: android email android-edittext textview

我正在尝试实现一个注册屏幕,其中我在两个ediTexts内有两个TextInputLayouts(一个用于电子邮件,另一个用于密码)。但是,对于电子邮件,我希望为域提供一个常量文本。有什么办法可以将文本设置为保留在editText的末尾或更好的建议吗?这里的电子邮件是提示,我希望用户只能在开头输入, @ example.com 保持不变。

enter image description here

3 个答案:

答案 0 :(得分:1)

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

1)在水平LinearLayout中,将textInputLayout(width = wrap_content)和包含域名的textView(width = 0dp& weight = 1)放在一起。每当电子邮件edittext获得焦点时,显示textview,否则将其隐藏。

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

由于

答案 1 :(得分:0)

所以这是更新的解决方案。

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

最后是免责声明......你可以在光标周围移动,但光标底部通常没有看到任何支架。

答案 2 :(得分:0)

你可以使用这个库,我已经工作了

https://github.com/gotokatsuya/ParkedTextView