如何在Android键盘上触发“shift-button”,以便下一个角色成为大写?
我将InputType
设置为InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | InputType.TYPE_TEXT_FLAG_MULTI_LINE
,但如果光标位于该行的任何位置,则无效。
我试过these two methods。两者都不起作用。第二个抛出RuntimeException
(“无法从主应用程序线程调用此方法”)。也许是因为这个按钮没有键码。
有没有办法触发按钮?
答案 0 :(得分:1)
编辑:
似乎像shift和alt这样的按钮会创建影响按下按钮的元状态。来自https://developer.android.com/reference/android/view/KeyEvent.html:
Meta状态描述了键修饰符的按下状态,例如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
中大写。如果没有,则将其更改为大写版本。这有点hacky并没有完全回答我的问题,但不幸的是我无法发表评论。