我正在尝试为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?
任何建议/帮助都将不胜感激。
谢谢。
答案 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()