编辑:
似乎像 shift 和 alt 这样的按钮会创建影响按下按钮的元状态。来自https://developer.android.com/reference/android/view/KeyEvent.html:
元状态描述键修饰符的按下状态,例如 META_SHIFT_ON 或 META_ALT_ON。
可以使用dispatchKeyEvent 模拟这些元状态,如下所示:
dispatchKeyEvent(new KeyEvent(0,0,KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_L,0,KeyEvent.META_SHIFT_ON));
如果EditText 处于焦点位置,则会在其中写入“L”。但似乎您不能只发送班次KeyEvent 并期望下一个字符是大写的。也许你可以想出一些解决方法。
您正在使用和EditText,对吗?由于某种原因,我无法获得
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_SHIFT_LEFT));
在 EditText 聚焦时工作,而 KeyEvents 用于字母和数字工作。
解决方法可能是将TextWatcher 添加到EditText:
editText.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
Log.d(TAG, "afterTextChanged: "+s.toString());
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
Log.d(TAG, "beforeTextChanged: "+s.toString());
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.d(TAG, "onTextChanged: "+s.toString());
}
});
并检查CharSequence s 的通缉字符是否在afterTextChanged 中大写。如果不是,则将其更改为大写版本。这有点老套,并不能完全回答我知道的你的问题,但不幸的是我无法发表评论。