Android将EditText设置为显示大写,但保留原始用户输入值



如何将EditText中的文本显示为全大写,但保存用户的原始输入?

我试过玩InputFilter,但运气不好。

有线索吗?

编辑:

我已经在使用以下代码:

editText.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

问题不是显示大写字母,而是保持原始用户的值。

创建TransformationMethod的实现,其中在getTransformation()中,执行将输入文本转换为所有大写的操作。输入文本本身保持不变;getTransformation()的返回值就是显示给用户的值。最常见的TransformationMethodPasswordTransformationMethod—这就是在输入密码时给你点的原因。

这可以简单到创建ReplacementTransformation的子类,覆盖getOriginal()以返回字母,覆盖getReplacement()以返回它们的全大写等价物。

在实现这一点时,只需稍微小心一点,将语言环境考虑在内,这样无论用户的当前语言是什么,都可以处理大写。

基于CommonsWare的洞察力,我能够完成以下实现。请注意,这不考虑其他语言,稍后将对此进行优化。

你需要像这样设置一个ReplacementTransformationMethod

public class UpperCaseTransformationMethod extends ReplacementTransformationMethod {
    private static final char[] ORIG = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
        'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
    private static final char[] REPL = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
        'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };

    public UpperCaseTransformationMethod() {}
    @Override
    public CharSequence getTransformation(CharSequence source, View v) {
        return super.getTransformation(source, v);
    }
    @Override
    public char[] getOriginal() {
        return ORIG;
    }
    @Override
    protected char[] getReplacement() {
        return REPL;
    }
}

然后,您只需将此方法应用于EditText,如下所示:

editText.setTransformationMethod(new UpperCaseTransformationMethod());

这将向用户显示大写字符,但保留其原始输入。

然后,您可以通过调用来获得原始输入

String originalInput = editText.getText().toString();

您需要EditText上的TextChangedListener。你可以做这样的事情-

edittext = (EditText)findViewById(R.id.edittext);
    edittext.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(s.length()>0)
            {
            //Handle the text here. 
            }
        }
        @Override
        public void afterTextChanged(Editable s) {
        }
    });

有太多的方法:

如果你想在你的xml上申报,你可以这样做:

android:inputType="textCapCharacters"

android:textAllCaps="true"

如果你想把它编程,你可以创建一个filter如下:

Your_Edit_Text.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

如果你想得到用户键入的内容,你可以使用TextWatcher

以下是如何做到这一点的示例:

Your_Edit_Text.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub
    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // TODO Auto-generated method stub
    }
    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub
    }
});

相关内容

最新更新