【问题标题】:How to add a constant uneditable text at the end of editText android?如何在editText android的末尾添加一个恒定的不可编辑文本?
【发布时间】:2016-12-19 12:08:08
【问题描述】:

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

【问题讨论】:

    标签: android email android-edittext textview


    【解决方案1】:

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

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

    最后一个免责声明...您可以在光标周围移动,但没有您通常在光标底部看到的支架。

    【讨论】:

    • 我研究过,但一直没能把文字留到最后。
    • @riadrifai 我的错!我看错了你的问题,我会在一段时间内更新我的答案。
    【解决方案2】:

    你可以使用这个库,我工作过

    https://github.com/gotokatsuya/ParkedTextView

    【讨论】:

      【解决方案3】:

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

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

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

      谢谢

      【讨论】:

      • 好的,谢谢,我会尽快尝试您的第一个建议。至于第二个,我将 ditText 中的字符数限制为域之前的电子邮件字符数,因为我已经知道(在我的情况下为 5 个),你认为这会使 textWatcher 更容易使用吗?
      • 好吧,如果你将editText中的字符数限制设置为5。那么你认为你的域名会在其中可见吗??
      • 限制是用户插入的文本,即我只允许他输入 5 个字符。与可见性无关
      • 如果将 maxLength 设置为 5,则用户只能输入 5 个字符。但是,如果您以编程方式向其附加更多字符,则也只有 5 个可见。
      • 好的,我明白你的意思了,那我试试第一种,谢谢
      猜你喜欢
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 2017-10-13
      • 2019-06-21
      • 1970-01-01
      • 2011-04-03
      • 2022-06-11
      • 1970-01-01
      相关资源
      最近更新 更多