首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为可选键创建自定义弹出键盘

为可选键创建自定义弹出键盘
EN

Stack Overflow用户
提问于 2017-09-18 05:31:45
回答 2查看 1.5K关注 0票数 5

我正在尝试为android中的替代键创建一个自定义弹出键盘。通过使用默认的键盘,我可以做的是为pop键盘提供一个自定义布局。

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

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

(2)键可以高亮显示,也可以通过移动手指来选择(长按住键,同时移动手指)

以下是我提到的链接:

构建自定义android键盘

创建每个键具有多个/备用字符的SoftKeyboard

如何禁用SoftKeyboard密钥预览窗口?

这是Gboard中的弹出键盘

如有任何建议/帮助,将不胜感激。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-08-13 09:52:02

如我所见,您已经检查了这篇文章:

https://www.blackcj.com/blog/2016/03/30/building-a-custom-android-keyboard

它解释了如何为弹出键盘添加自定义布局。

它允许的唯一定制是更改键、背景和文本颜色。

另外,您可以使用一个KeyboardView子类,然后重写它的方法来实现您的目标,比如onTouchEvent()捕获运动事件,或者onDraw()重新绘制键盘区域:

代码语言:javascript
复制
<org.home.CustomPopupKeyboard
  android:id="@android:id/keyboardView"
  ...
/>

另外,请查看Hacker的键盘源代码:

https://github.com/klausw/hackerskeyboard

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

编辑:

根据Hacker的键盘代码,在释放密钥时关闭弹出窗口的唯一方法是创建您自己的KeyboardView类,它直接扩展View,然后更改其onTouchEvent()

Android的原生KeyboardView类具有PopupWindow mPopupKeyboard属性,即private,因此不能对其进行子类化,并调用mPopupKeyboard.dismiss()来隐藏弹出窗口。

从释放键到弹出关闭键的链是:

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

Stack Overflow用户

发布于 2018-01-12 11:51:32

代码语言:javascript
复制
    <?xml version="1.0" encoding="utf-8"?>


    <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
        android:keyWidth="10%p"
        android:horizontalGap="0px"
        android:verticalGap="0px"
        android:keyHeight="@dimen/key_height">
        <Row android:keyHeight="2px"></Row>
        <Row>
            <Key
                android:codes="49"
                android:keyEdgeFlags="left"
                android:keyLabel="1" />
            <Key
                android:codes="50"
                android:keyLabel="2" />
            <Key
                android:codes="51"
                android:keyLabel="3" />
            <Key
                android:codes="52"
                android:keyLabel="4" />
            <Key
                android:codes="53"
                android:keyLabel="5" />
            <Key
                android:codes="54"
                android:keyLabel="6" />
            <Key
                android:codes="55"
                android:keyLabel="7" />
            <Key
                android:codes="56"
                android:keyLabel="8" />
            <Key
                android:codes="57"
                android:keyLabel="9" />
            <Key
                android:codes="48"
                android:keyEdgeFlags="right"
                android:keyLabel="0" />
        </Row>

        <Row>
            <Key
                android:codes="113"
                android:keyEdgeFlags="left"
                android:keyLabel="q" />
            <Key
                android:codes="119"
                android:keyLabel="w" />

            <Key
                android:codes="101"
                android:keyLabel="e" />
            <Key
                android:codes="114"
                android:keyLabel="r" />
            <Key
                android:codes="116"
                android:keyLabel="t" />
            <Key
                android:codes="121"
                android:keyLabel="y" />
            <Key
                android:codes="117"
                android:keyLabel="u" />
            <Key
                android:codes="105"
                android:keyLabel="i" />

            <Key
                android:codes="111"
                android:keyLabel="o" />
            <Key
                android:codes="112"
                android:keyEdgeFlags="right"
                android:keyLabel="p" />
        </Row>


        <Row>

            <Key
                android:codes="97" android:keyLabel="a" android:horizontalGap="5%p"
                android:keyEdgeFlags="left" android:popupKeyboard="@xml/keyboard_popup_template"
                android:popupCharacters="áăä"/>
            <Key
                android:codes="115"
                android:keyLabel="s" />
            <Key
                android:codes="100"
                android:keyLabel="d" />
            <Key
                android:codes="102"
                android:keyLabel="f" />
            <Key
                android:codes="103"
                android:keyLabel="g" />
            <Key
                android:codes="104"
                android:keyLabel="h" />
            <Key
                android:codes="106"
                android:keyLabel="j" />
            <Key
                android:codes="107"
                android:keyLabel="k" />
            <Key
                android:codes="108"
                android:keyEdgeFlags="right"
                android:keyLabel="l" />


        </Row>

        <Row>
            <Key
                android:codes="-1" android:keyIcon="@drawable/narrow2"
                android:keyWidth="15%p" android:isModifier="true"
                android:isSticky="true" android:keyEdgeFlags="left" />
            <Key
                android:codes="122"
                android:keyLabel="z"
                android:keyWidth="15%p" />
            <Key
                android:codes="120"
                android:keyLabel="x"
                android:keyWidth="15%p" />
            <Key
                android:codes="99"
                android:keyLabel="c"
                android:keyWidth="15%p" />
            <Key
                android:codes="118"
                android:keyLabel="v"
                android:keyWidth="15%p" />
            <Key
                android:codes="98"
                android:keyLabel="b"
                android:keyWidth="15%p" />
            <Key
                android:codes="110"
                android:keyLabel="n"
                android:keyWidth="15%p" />
            <Key
                android:codes="109"
                android:keyLabel="m"
                android:keyWidth="15%p" />
            <Key
                android:codes="-5"
                android:isRepeatable="true"
                android:keyEdgeFlags="right"
                android:keyIcon="@drawable/sym_keyboard_delete"
                android:keyWidth="20%p" />
        </Row>

        <Row
            android:rowEdgeFlags="bottom"
            android:verticalGap="5px">

            <Key
                android:codes="-2"
                android:keyEdgeFlags="left"
                android:keyLabel="123"
                android:keyWidth="15%p" />
            <Key
                android:codes="64"
                android:keyLabel="\@"
                android:keyWidth="10%p" />

            <Key
                android:codes="-101"
                android:keyIcon="@drawable/sym_keyboard_language_switch"
                android:keyWidth="10%p" />
            <Key
                android:codes="32"
                android:isRepeatable="true"
                android:keyLabel="SPACE"
                android:keyWidth="30%p" />

            <Key
                android:codes="46"
                android:keyLabel="."
                android:keyWidth="10%p" />
            <Key
                android:codes="44"
                android:keyLabel=","
                android:keyWidth="10%p"
                android:popupCharacters=".,?!#@"
                android:popupKeyboard="@xml/keyboard_popup_template" />
            <Key
                android:codes="-4"
                android:keyEdgeFlags="right"
                android:keyLabel="DONE"
                android:keyWidth="20%p" />
        </Row>

        <Row android:keyHeight="2px"></Row>

    </Keyboard>

Please try it.
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46272190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档