Android 将 EditText 设置为显示大写但保留原始用户输入值
Android set EditText to show caps but keep original user input values
如何将 EditText
中的文本显示为全部大写,但保存用户的原始输入?
我试过 InputFilter
s 但没有成功。
有线索吗?
编辑:
我已经在使用以下代码:
editText.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
问题是不显示大写字母,问题是保留原始用户的值。
创建 an implementation of TransformationMethod
,在 getTransformation()
中,您将输入文本转换为全部大写。输入文本本身没有变化; getTransformation()
中的 return 值就是向用户显示的值。最常见的 TransformationMethod
是 PasswordTransformationMethod
— 这是输入密码时给你的点。
这可以像创建 a subclass of ReplacementTransformation
一样简单,将 getOriginal()
覆盖为 return 字母,将 getReplacement()
覆盖为 return 它们的全大写等价物。
在实现这个时要小心地考虑语言环境,这样无论用户的当前语言是什么,您都可以处理大写。
方法太多了:
如果您想在 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
}
});
您需要在 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) {
}
});
基于 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
中的文本显示为全部大写,但保存用户的原始输入?
我试过 InputFilter
s 但没有成功。
有线索吗?
编辑:
我已经在使用以下代码:
editText.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
问题是不显示大写字母,问题是保留原始用户的值。
创建 an implementation of TransformationMethod
,在 getTransformation()
中,您将输入文本转换为全部大写。输入文本本身没有变化; getTransformation()
中的 return 值就是向用户显示的值。最常见的 TransformationMethod
是 PasswordTransformationMethod
— 这是输入密码时给你的点。
这可以像创建 a subclass of ReplacementTransformation
一样简单,将 getOriginal()
覆盖为 return 字母,将 getReplacement()
覆盖为 return 它们的全大写等价物。
在实现这个时要小心地考虑语言环境,这样无论用户的当前语言是什么,您都可以处理大写。
方法太多了:
如果您想在 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
}
});
您需要在 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) {
}
});
基于 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();