在 Android 自定义键盘中检测 isSticky

Posted

技术标签:

【中文标题】在 Android 自定义键盘中检测 isSticky【英文标题】:Detecting isSticky in Android custom keyboards 【发布时间】:2015-11-18 23:50:30 【问题描述】:

我有一个自定义键盘,其按钮启用了 isSticky,但我无法检测它是打开还是关闭(真/假),并且在按下任何键后禁用它们(如果它已打开(真))。

这个问题是我找不到检测按键的方法,也无法在当前的编辑文本中附加功能(所有粘性按钮都有特定的功能)。

这应该发生在 OnKey 函数中,

这是我的键盘类:

public class MyKeyboardListener : Java.Lang.Object, KeyboardView.IOnKeyboardActionListener

    private readonly Activity _activity;

    public MyKeyboardListener(Activity activity)
        _activity = activity;
    

    public void OnKey(android.Views.Keycode primaryCode, Android.Views.Keycode[] keyCodes)
        var eventTime = DateTime.Now.Ticks;
        var keyEvent = new KeyEvent(eventTime, eventTime, KeyEventActions.Down, primaryCode, 0);

        switch ((int)primaryCode) 
            case 1005:
            break;

            case 1006:
            break;

            default:
                _activity.DispatchKeyEvent(keyEvent);
            break;
        
    

    public void OnPress(Android.Views.Keycode primaryCode)
    

    public void OnRelease(Android.Views.Keycode primaryCode)
    

    public void OnText(Java.Lang.ICharSequence text)
    

    public void SwipeDown()
    

    public void SwipeLeft()
    

    public void SwipeRight()
    

    public void SwipeUp()
    

Keyboard.axml

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyWidth="100%"
android:keyHeight="6%p">
<Row>
    <Key
        android:codes="1000"
        android:keyLabel="A"
        android:keyEdgeFlags="left"
        android:isModifier="true" 
        android:isSticky="true"
        android:horizontalGap="1%p" />
    <Key
        android:codes="1001"
        android:keyLabel="B"
        android:isModifier="true" 
        android:isSticky="true"
        android:horizontalGap="1%p" />
    <Key
        android:codes="1002"
        android:keyLabel="C"
        android:isModifier="true" 
        android:isSticky="true"
        android:horizontalGap="1%p" />
    <Key
        android:codes="1003"
        android:keyLabel="D"
        android:isModifier="true" 
        android:isSticky="true"
        android:horizontalGap="1%p" />
    <Key
        android:codes="1004"
        android:keyLabel="E"
        android:keyEdgeFlags="right"
        android:isModifier="true" 
        android:isSticky="true"
        android:horizontalGap="1%p" />
</Row>
<Row>
    <Key
        android:codes="8"
        android:keyLabel="1"
        android:keyEdgeFlags="left"
        android:horizontalGap="1%p" />
    <Key
        android:codes="9"
        android:keyLabel="2"
        android:horizontalGap="1%p" />
    <Key
        android:codes="1005"
        android:keyLabel="F"
        android:horizontalGap="1%p" />
    <Key
        android:codes="1006"
        android:keyLabel="G46"
        android:horizontalGap="1%p" />
    <Key
        android:codes="67"
        android:keyLabel="DELETE"
        android:keyEdgeFlags="right"
        android:horizontalGap="1%p" />
</Row>
</Keyboard>

【问题讨论】:

【参考方案1】:

在公共类LatinKeyboardView扩展KeyboardView,覆盖onDraw方法并使用以下代码获取粘滞键和修饰键

List<Key> keys = getKeyboard().getKeys();
for (Key key : keys) 
    Drawable npd;
    // int drawable = R.drawable.btn_normal_with_shadow_t1;
    int drawable = R.drawable.key_normal;
    textColor = sessionManager.getSimpleyKeyTextColor();

    if (key.pressed) 
        drawable = R.drawable.key_normal;
     else 
        if (key.modifier && key.sticky) 
            drawable = R.drawable.stickey_with_shad_bord;
            textColor = sessionManager.getSimpleyKeyTextColorModifiers();
         else if (key.modifier) 
            drawable = R.drawable.modifier_btn_with_bord_shad;
            textColor = sessionManager.getSimpleyKeyTextColorModifiers();
         else 
            drawable = R.drawable.key_normal;
        
    

这是我们将修饰符设置为true的xml代码

<Key
    android:codes="-1"
    android:isModifier="true"
    android:keyWidth="14.8%p"
    android:keyEdgeFlags="left"
    android:keyIcon="@drawable/ic_shift_normal" />

【讨论】:

以上是关于在 Android 自定义键盘中检测 isSticky的主要内容,如果未能解决你的问题,请参考以下文章

检测是不是已安装自定义键盘

如何检测是否从键盘的容器应用程序激活自定义键盘?

在自定义键盘扩展中检测输入对象视图类型

Android自定义软键盘

如何制作Android自定义键盘?

Android:在自定义键盘上添加 imageButton