我已经使用以下选项来制作单词大写的每个起始字母
<EditText
android:inputType="text|textCapWords"/>
键入用户时,键盘上有选项可以更改字母大小写,即使用此选项的用户可以轻松输入lowercase
个字母。
此外,我希望EditText
上的文字采用此格式
Each Starting Letter Of A Word Must Be In Uppercase And All Other Letter Of The Word Be In Lowercase
。
含义,当用户输入
时 each StArting LeTTer of a word musT be in uppercase and all other leTTer of the word be in lowercase
,它会自动转换为以上格式。
我尝试使用TextWatcher
和string.split(\\s+)
来获取所有字词,然后让每个字都遵循上述格式。但我总是得到错误。
所以,如果有任何解决方案,那就太棒了。我想让它以InputFilter.AllCaps
的方式工作。
这是我目前的代码
private void changeToUpperCase(String inputString) {
if (inputString != null && inputString.trim().length() > 0) {
// businessName.addTextChangedListener(null);
String[] splitString = inputString.split("\\s+");
int length = splitString.length;
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < length; i++) {
String convertedString = splitString[i];
stringBuffer.append(Character.toUpperCase(convertedString
.charAt(0)));
stringBuffer.append(convertedString.substring(1).toLowerCase());
stringBuffer.append(" ");
}
Log.i("changed String", stringBuffer.toString());
// businessName.setText(stringBuffer.toString());
stringBuffer.delete(0, stringBuffer.length());
stringBuffer = null;
// businessName.addTextChangedListener(this);
}
}
我从TextWatcher
,afterTextChanged(Editable s)
答案 0 :(得分:21)
在布局xml
中,添加android:capitalize="sentences"
android:capitalize
的选项如下:
android:capitalize="none"
:不会自动将任何内容大写。
android:capitalize="sentences"
:将每个句子的第一个单词大写。
android:capitalize="words"
:将每个单词的第一个字母大写。
android:capitalize="characters"
:将每个角色都大写。
更新
由于android:capitalize
已弃用,现在需要使用:
android:inputType="textCapWords"
答案 1 :(得分:2)
以编程方式更改输入类型。
如果您处于View布局而不是使用此代码
EditText text = new EditText(context);
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS); // which will capitalize the first letter of every word.
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); //which will capitalize every character.
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); //which will capitalize the first word of each sentence.
addView(text);
如果你在活动
EditText text = new EditText(this);
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS); // which will capitalize the first letter of every word.
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); //which will capitalize every character.
text.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); //which will capitalize the first word of each sentence.
setContentView(text);
答案 2 :(得分:1)
试试这个,
txtView.setText(WordUtils.capitalize("text view")
WordUtils.java
public class WordUtils {
public static String capitalize(String str) {
return capitalize(str, (char[]) null);
}
public static String capitalize(String str, char... delimiters) {
int delimLen = delimiters == null ? -1 : delimiters.length;
if (!TextUtils.isEmpty(str) && delimLen != 0) {
char[] buffer = str.toCharArray();
boolean capitalizeNext = true;
for (int i = 0; i < buffer.length; ++i) {
char ch = buffer[i];
if (isDelimiter(ch, delimiters)) {
capitalizeNext = true;
} else if (capitalizeNext) {
buffer[i] = Character.toTitleCase(ch);
capitalizeNext = false;
}
}
return new String(buffer);
} else {
return str;
}
}
private static boolean isDelimiter(char ch, char[] delimiters) {
if (delimiters == null) {
return Character.isWhitespace(ch);
} else {
char[] arr$ = delimiters;
int len$ = delimiters.length;
for (int i$ = 0; i$ < len$; ++i$) {
char delimiter = arr$[i$];
if (ch == delimiter) {
return true;
}
}
return false;
}
}
}
答案 3 :(得分:1)
android:capitalize
已弃用。请改用inputType
。
答案 4 :(得分:0)
要使每个单词的首字母大写:
android:inputType="textCapWords"
要使每个句子的首字母大写:
android:inputType="textCapSentences"
要每个字母大写:
android:inputType="textCapCharacters"