如何在Android键盘上触发shift键?

如何在Android键盘上触发shift键?,android,android-softkeyboard,Android,Android Softkeyboard,如何触发Android键盘上的“shift”按钮,以便下一个字符为大写 我将InputType设置为InputType.TYPE_TEXT_FLAG_CAP_句子| InputType.TYPE_TEXT_FLAG_MULTI_行,但如果光标位于行中的任何位置,则此操作不起作用 我试过了。两者都不起作用。第二个线程抛出一个运行时异常(“无法从主应用程序线程调用此方法”)。可能是因为这个按钮没有按键代码。 有办法触发按钮吗?编辑: 似乎像shift和alt这样的按钮会创建影响按下按钮的元状态。发件

如何触发Android键盘上的“shift”按钮,以便下一个字符为大写

我将
InputType
设置为
InputType.TYPE_TEXT_FLAG_CAP_句子| InputType.TYPE_TEXT_FLAG_MULTI_行
,但如果光标位于行中的任何位置,则此操作不起作用

我试过了。两者都不起作用。第二个线程抛出一个
运行时异常
(“无法从主应用程序线程调用此方法”)。可能是因为这个按钮没有按键代码。
有办法触发按钮吗?

编辑:

似乎像shift和alt这样的按钮会创建影响按下按钮的元状态。发件人:

元状态描述按键修改器的按下状态,如元移位或元替换

可以使用
dispatchKeyEvent
模拟这些元状态,如下所示:

dispatchKeyEvent(new KeyEvent(0,0,KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_L,0,KeyEvent.META_SHIFT_ON));
如果焦点中有一个
EditText
,则会在其中写入“L”。但似乎您不能只发送shift
KeyEvent
,而期望下一个字符为大写。也许你可以想出一些解决办法


您正在使用and
EditText
,对吗?因为某种原因,我找不到

dispatchKeyEvent(新的KeyEvent(KeyEvent.ACTION\u DOWN,KeyEvent.KEYCODE\u SHIFT\u LEFT))

当编辑文本聚焦时工作,而字母和数字的
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
的所需字符是否在
posterextchanged
中大写。如果不是,则将其更改为大写版本。这是一个有点骇客和不完全回答你的问题,我知道,但不幸的是,我不能评论。

谢谢你的回答,没有问题,我也无法在其他线程中评论。现在回答你的问题。是的,我正在使用EditText。那么,是否不可能使用该dispatchKeyEvent?因为现在我什么都没做。变通办法不是我想做的事。但是谷歌如何在他们的谷歌文档编辑器中实现这一点呢?