在 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的主要内容,如果未能解决你的问题,请参考以下文章