Android带有后缀的编辑框

3
我是一个新手Android开发人员,在公司项目中遇到了一个问题。我需要一个带有固定后缀的EditText,以便当用户输入时,后缀会像EditText的正常内容一样换行,但用户不能编辑和选择此后缀部分。
我已经搜索过并没有找到解决此问题的好方法。有些人建议在EditText右侧添加包含文本的drawable,但这种解决方案当人们输入时不会使后缀部分换行。
另一个可能的解决方案是处理EditText的文本更改,但这将导致非常复杂的光标处理(如处理文本提示和用户选择手势等)。
所以我的问题是:是否有人实现了类似的功能,或者可否指点我一些方向,以便为EditText轻松地实现此功能。
2个回答

3

这里有一个不太优雅的解决方案来解决你的问题。

假设你有一个名为 mEditText 的 EditText,一个名为 SUFFIX 的 String,以及一个名为 addedSuffix 的 boolean

 boolean addedSuffix = false;
 String SUFFIX = " my suffix";
 EditText mEditText = (EditText) findViewById(R.id.my_edit_text);

TextWatcher附加到您的EditText

mEditText.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 the only text is the suffix
                if(s.toString().equals(SUFFIX)){
                    mEditText.setText(""); // clear the text
                    return;
                }

                // If there is text append on SUFFIX as long as it is not there
                // move cursor back before the suffix
                if(s.length() > 0 && !s.toString().contains(SUFFIX) && !s.toString().equals(SUFFIX)){
                    String text = s.toString().concat(SUFFIX);
                    mEditText.setText(text);
                    mEditText.setSelection(text.length() - SUFFIX.length());
                    addedSuffix = true; // flip the addedSuffix flag to true
                }
            }

            @Override
            public void afterTextChanged(Editable s) { 
                if(s.length() == 0){
                     addedSuffix = false; // reset the addedSuffix flag
                }
            }
        });

就像我说的,这是一种快速而简单的解决方案,因此只有在用户实际输入到EditText字段时才会添加后缀。如果您需要在用户开始输入之前添加后缀,则可以自行修改逻辑。

祝你好运,编码愉快!


0
请在您的EditText的onFocusChangedListener上尝试此代码。 当您的focuschangelistener未聚焦或正在聚焦于其他字段时,将添加您的后缀值。
// sdur是我的EditText名称
sdur.setOnFocusChangeListener(View.OnFocusChangeListener { v, hasFocus ->


        if (!hasFocus) {
            if((!sdur.text.toString().endsWith("mins")&&(sdur.text.toString().isNotEmpty()))){
                var jj=sdur.text.toString()
                sdur.setText("$jj mins")
            }
           // code to execute when EditText loses focus
        }

});

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