Android键盘按键覆盖

时间:2015-05-16 13:54:30

标签: android overlay

我很好奇如何在某些按钮或按键上实现以下叠加,如下图所示?我正在实现自定义键盘......同样需要这个东西。

enter image description here

编辑:

所以,我已经使用Gridview实现了如下的键盘。

enter image description here

现在,我正尝试在默认键盘上放置一些叠加(点击)。

谢谢:)

2 个答案:

答案 0 :(得分:6)

您正在寻找的是“关键预览” 我假设您正在使用KeyboardView来创建自定义键盘。您可以通过调用setPreviewEnabled(boolean previewEnabled)来启用密钥预览,它应该是这样的:mKeyboardView.setPreviewEnabled(true);

编辑:

我认为link会帮助您实施,并详细解释我的目标。

首先为键盘创建一个布局,通常它只包含一个keyboardView:

<?xml version="1.0" encoding="UTF-8"?>
    <android.inputmethodservice.KeyboardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/keyboard"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:keyPreviewLayout ="@layout/preview" />

然后为预览创建另一个布局:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:background="#ffff00"   
    android:textStyle="bold"
    android:textSize="30sp">    
</TextView>

之后你就可以在你的情况下设计你的键盘:

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

最后在您的java代码中,您可以为您的keyboardView充气,或者如果它包含在片段或活动布局中,您可以通过它获取它。然后设置你设计的键盘。

kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null);
keyboard = new Keyboard(this, R.xml.numeric);
kv.setKeyboard(keyboard);
kv.setOnKeyboardActionListener(this);
祝你好运。

答案 1 :(得分:1)

使用PopupWindow作为键预览功能(实际上我在上一个IME项目中做了同样的事情)。

我建议您使用KeyboardView的子类,因为它为您提供了很多功能,可以让事情顺利进行。每次按下keyonPressed都会被调回你知道哪一个被按下了。并深入了解KeyboardView的源代码,您可以了解从课堂上放置popupWindow的位置。

只需一点努力。但是,如果你的课程不是来自KeyboardView(比如使用GridView),你将需要花费更多的时间来弄明白。不管怎样,源代码是一个好的开始。