带有 GBoard 输入的 EditText 的首字母大写
Posted
技术标签:
【中文标题】带有 GBoard 输入的 EditText 的首字母大写【英文标题】:First letter capitalization for EditText with GBoard input 【发布时间】:2018-01-16 11:57:03 【问题描述】:我正在尝试设置“首字母大写”程序(因为我在ListView
中设置了EditText
)
与这个问题相关的话题很多,我猜最著名的是that。我已经尝试过那里提供的解决方案,并且
setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES)
真的很有帮助。例外 - 当用户使用 GBoard
(谷歌键盘) 它没有帮助。 (自动大写没有关闭)
那么,是否有可能让它为GBoard
工作?或者……当edittext
中没有文本时,是否可以以编程方式press shift
?
【问题讨论】:
没有(知道我能找到)方法来覆盖它。最好的选择(从不同的制造商混乱与 android-all-the-time 的角度来看是最安全的)是您已经在做的事情和文本侦听器的组合,以大写 CharSequence 的第一个字母(或者当字段失去焦点时,如果您的用户案例发生这种情况)。如果可行的话,也可以将 CapWords 视为一个标志(因为无论 Board 开关如何,它都会起作用)。但总而言之,最好的解决方案是两者兼而有之。 【参考方案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 答案。
【讨论】:
如果我错了,请纠正我,但这会使用户无法故意将第一个字母变小,例如。删除大写字母并在第一个输入一个小写字母?以上是关于带有 GBoard 输入的 EditText 的首字母大写的主要内容,如果未能解决你的问题,请参考以下文章
Android EditText("Textbox") :在用户输入时自动大写每个单词的首字母
谷歌Gboard输入法新增“无痕模式”:仅在Chrome隐身窗口中适用