Java 带GBoard输入的EditText的首字母大写
我正在尝试设置“首字母大写”程序(因为我在Java 带GBoard输入的EditText的首字母大写,java,android,android-keypad,capitalization,gboard,Java,Android,Android Keypad,Capitalization,Gboard,我正在尝试设置“首字母大写”程序(因为我在ListView中设置了一组EditText) 与这个问题相关的话题很多,我想最著名的是。我已经尝试了那里提供的解决方案 setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES) 真的很有帮助。例外-当用户使用GBoard(谷歌键盘)时,它没有帮助。(自动大写未关闭) 那么,有没有可能让它在GBoard上工作?或者也许。。。当edittext中没有文本时
ListView
中设置了一组EditText
)
与这个问题相关的话题很多,我想最著名的是。我已经尝试了那里提供的解决方案
setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES)
真的很有帮助。例外-当用户使用GBoard
(谷歌键盘)时,它没有帮助。(自动大写未关闭)
那么,有没有可能让它在
GBoard
上工作?或者也许。。。当edittext
中没有文本时,是否可以通过编程方式按shift
?我在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) {
}
});
请注意,如果您真的需要在不支持首字母大写的键盘上完成工作,那么这只是一种变通方法
它将输入的第一个字符大写(忽略数字和特殊字符)。
唯一的缺陷是,键盘的输入(在我们的例子中是Gboard)仍然显示小写字母
有关ContextChanged参数的详细解释,请参见答案。没有(已知我能找到)方法覆盖该参数。最好的选择(从不同制造商的角度来看,最安全的方法是一直使用android),是将您已经在做的事情与文本侦听器相结合,以大写字符序列的第一个字母(或者当字段失去焦点时,如果您的用户案例发生这种情况)。也可以把引号看作是一个标志,如果这是有效的(因为不管电路板的切换,它都会工作)。但总而言之,最好的解决方案是两者兼而有之。如果我错了,请纠正我,但这将禁止用户故意将第一个字母变小,例如删除大写字母并输入一个小写字母作为第一个字母?