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

时间:2015-11-10 00:31:36

标签: android android-edittext uppercase

如何将EditText中的文字全部显示,但保存用户的原始输入?

我试过玩InputFilter但没有运气。

任何线索?

修改

我已经在使用以下代码:

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

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

4 个答案:

答案 0 :(得分:3)

创建an implementation of TransformationMethod,在getTransformation()中,您可以将输入文本转换为所有大写字母。输入文本本身没有变化;您从getTransformation()返回的值是向用户显示的内容。最常见的TransformationMethodPasswordTransformationMethod - 它是在输入密码时为您提供点数的原因。

这可以像创建a subclass of ReplacementTransformation一样简单,重写getOriginal()以返回字母,getReplacement()返回其全部大写字母。

在实现此功能时要特别注意将语言环境考虑在内,这样您就可以使用用户当前的语言处理大小写。

答案 1 :(得分:2)

基于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();

答案 2 :(得分:0)

方法太多了:

如果您想在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
    }
});

答案 3 :(得分:0)

您需要在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) {

        }
    });