【问题标题】:How to trigger shift-button on Android keyboard?如何触发 Android 键盘上的 shift 按钮?
【发布时间】:2018-12-05 15:00:04
【问题描述】:

如何触发 Android 键盘上的“shift-button”,让下一个字符变为大写?

我将InputType 设置为InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | InputType.TYPE_TEXT_FLAG_MULTI_LINE,但如果光标位于行中的任何位置,这将不起作用。

我试过these two methods。两者都不起作用。第二个抛出RuntimeException(“无法从主应用程序线程调用此方法”)。可能是因为这个按钮没有键码。 有没有办法触发按钮?

【问题讨论】:

    标签: android android-softkeyboard


    【解决方案1】:

    编辑:

    似乎像 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 中大写。如果不是,则将其更改为大写版本。这有点老套,并不能完全回答我知道的你的问题,但不幸的是我无法发表评论。

    【讨论】:

    • 感谢您的回答,没问题,我也无法在其他线程中发表评论。现在回答你。是的,我正在使用 EditText。那么就不能使用那个dispatchKeyEvent吗?因为此刻我什么都不做。 workaroung 不是我想做的事。但是如何在他们的 GoogleDocs-Writer 中搜索它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2013-03-12
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多