android - 如何将editText中的字母大写?
问题描述
我很简单Edittext
,当我要在即时设置监听器中更改输入字母时new textWatcher
,它的onTextChanged()
方法如下:
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.d("qwer", "onTextChanged: " + s + " " + start + " " + before + " " + count);
String originalText = s.toString();
int originalTextLength = originalText.length();
int currentSelection = textHeading.getSelectionStart();
StringBuilder sb = new StringBuilder();
boolean hasChanged = false;
for (int i = 0; i < originalTextLength; i++) {
char currentChar = originalText.charAt(i);
if (isAllowed(currentChar) && i < 21) {
sb.append(currentChar);
} else {
hasChanged = true;
textHeading.setError("Please insert current letters");
}
}
if (hasChanged) {
String newText = sb.toString();
textHeading.setText(capitalize(newText));
textHeading.setSelection(currentSelection);
}
}
当我将经过验证的数据设置回edittext时,无限循环开始了,因为它ontextCahnged()
再次调用方法。所以我的目标是动态更改输入字母,我必须将其大写。我知道有更多最简单的方法可以做到这一点。但我需要这样做。
解决方案
有很多方法可以做到这一点:
1- 使用常用的 Utils
图书馆:http ://commons.apache.org/proper/commons-lang/
StringUtils.capitalize(..)
2- 通过自定义方法
public static String upperCaseFirst(String value) {
// Convert String to char array.
char[] array = value.toCharArray();
// Modify first element in array.
array[0] = Character.toUpperCase(array[0]);
// Return string.
return new String(array);
}
3- 来自 apache Common
图书馆:http ://commons.apache.org/proper/commons-lang/
WordUtils.capitalize(java.lang.String)
现在您可以将该字符串分配给您的输入框。
推荐阅读
- sql - Hive - 分层组的多个(平均)计数不同
- c - 将 strcpy 与链表成员一起使用时出现分段错误
- python - PythonMagick 模块是否存在?
- amazon-web-services - 在针对保存在 S3 中的 csv 创建 Hive 表时,我是否绝对必须按照 csv 中行的逗号分隔值的顺序对字段进行排序?
- javascript - Javascript 多个“尝试”
- javascript - 在命令行上运行节点 js 文件时找不到模块
- c# - 列表不会用 protobuf 序列化
- python - Python,使用自定义名称创建一个列表
- google-chrome - “icudtl.dat not found in bundle”在 Mac 上启动自定义品牌 Chromium 构建时?
- node.js - pm2-runtime 无法启动集群