为备用键创建自定义弹出键盘

时间:2017-09-18 05:31:45

标签: android android-softkeyboard gboard

我正在尝试为android中的替代键创建自定义弹出键盘。通过使用默认键盘,我只能自定义弹出键盘的自定义布局。

我也需要自定义行为(如 Gboard 中的那个),例如,

(1)当长按按钮时,默认情况下应突出显示特定按键

(2)通过移动手指可以突出显示并选择按键(长按键并同时移动手指)

这些是我引用的链接:

Building a custom android keyboard

Creating a SoftKeyboard with Multiple/Alternate characters per key

How do you disable the SoftKeyboard key preview window?

这是Gboard中的弹出键盘 enter image description here

任何建议/帮助都将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:1)

$1

答案 1 :(得分:0)

如我所见,您已经检查了这篇文章:
https://www.blackcj.com/blog/2016/03/30/building-a-custom-android-keyboard

它说明了如何为弹出式键盘添加自定义布局。
它唯一允许的自定义是更改按键背景和文本颜色。

此外,您可以使用KeyboardView子类,然后重写其方法来实现目标,例如onTouchEvent()捕获动作事件或onDraw()来重绘键盘区域:

<org.home.CustomPopupKeyboard
  android:id="@android:id/keyboardView"
  ...
/>

还请检查黑客键盘来源:
https://github.com/klausw/hackerskeyboard

似乎,它使用LatinKeyboardBaseView extends View中的layout/keyboard_popup.xml类作为弹出键盘。


编辑:

根据 Hacker's Keyboard (黑客的键盘)代码,释放键时我发现关闭弹出窗口的唯一方法是创建自己的KeyboardView类,该类扩展了View直接,然后更改其onTouchEvent()

Android的本机KeyboardView类具有PopupWindow mPopupKeyboard的{​​{1}}属性,因此您不能对其进行子类化并调用private来隐藏弹出窗口。

从释放键到弹出窗口关闭的链为:

  • mPopupKeyboard.dismiss()> LatinKeyboardBaseView::onTouchEvent()> case MotionEvent.ACTION_UP: onUpEvent()
  • tracker.onUpEvent()> PointerTracker::onUpEvent()> detectAndSendKey()
  • listener.onCancel()LatinKeyboardBaseView::onCancel()接口的实现)> OnKeyboardActionListener> dismissPopupKeyboard()