【问题标题】:Detecting isSticky in Android custom keyboards在 Android 自定义键盘中检测 isSticky
【发布时间】: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>

【问题讨论】:

    标签: c# android xml xamarin


    【解决方案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" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 2014-11-24
      • 2015-08-05
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 2012-12-26
      相关资源
      最近更新 更多