我试图设置"首字母大写" progrommaticaly (因为我在EditText
中设置了ListView
)
有很多与此问题相关的话题,最有名的是that我猜。我已经尝试了那里提供的解决方案和
setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES)
真有帮助。例外 - 当用户使用GBoard
(谷歌键盘)时,它无法提供帮助。 (自动大写未关闭)
那么,是否可以让它适用于GBoard
?或者......如果press shift
中没有文字,可以edittext
进行推进吗?
答案 0 :(得分:1)
我在Gboard上遇到了同样的问题,并通过以下方式解决了该问题:
final EditText editText = (EditText) findViewById(R.id.editText);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//Check if the entered character is the first character of the input
if(start == 0 && before == 0){
//Get the input
String input = s.toString();
//Capitalize the input (you can also use StringUtils here)
String output = input.substring(0,1).toUpperCase() + input.substring(1);
//Set the capitalized input as the editText text
editText.setText(output);
//Set the cursor at the end of the first character
editText.setSelection(1);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
请注意,这只是一种变通方法,如果您确实需要在不支持大写首字母standard way的键盘上完成工作。
它大写输入的第一个字符(数字和特殊字符被忽略)。 唯一的缺点是,键盘输入(在我们的示例中为Gboard)仍然显示小写字母。
有关onTextChanged参数的详细说明,请参见this答案。