这个问题不同于这里已经问过的所有其他问题.
问题与问题
当我打开键盘时,我想让大写锁定启用,就像我双击(或长按) shift键一样。另一个请求是,如果用户按shift键,则必须禁用caps锁。
我已经在堆栈溢出(如android:inputType="textCapCharacters“或setAllCaps(true) )中尝试了大多数建议的解决方案,但所发生的情况是无法禁用caps锁。使用上述解决方案,用户按shift键时,将插入一个小写字符,然后系统自动将键盘设置为大写锁。
这不是我想要的正确方式,我只希望在用户第一次打开keybaoard时启用caps,然后由他自己处理caps状态。
备注
请记住,我以“如果双击(或长按下) shift键”开始这个问题,因为使用inputType解决方案会遇到以下情况:

如果我手动启用大写锁的话,没有白大号的:

发布于 2017-03-16 10:20:11
我已经找到了解决这个问题的办法!
我必须继续使用android:inputType="textCapCharacters",但是当用户按shift键并键入一个小写字符时,文本处理程序会删除标志textCapCharacters.。
如下所示,文本处理程序完成了这一任务:
public class EditTextWatcher implements TextWatcher{
private EditText editText;
public PtlEditTextWatcher(EditText editText) {
this.editText = editText;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) { }
@Override
public void afterTextChanged(Editable s) {
if (editText != null && s.length() > 0 && (editText.getInputType() & InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS) > 0)
if (Character.isLowerCase(s.toString().charAt(s.length() - 1)))
editText.setInputType(editText.getInputType() & ~InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
}
}它的一个简单用途是:
addTextChangedListener(new EditTextWatcher(myEditText));https://stackoverflow.com/questions/42808935
复制相似问题