如何制作Android自定义键盘?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何制作Android自定义键盘?相关的知识,希望对你有一定的参考价值。

我想制作一个自定义键盘。我不知道如何在xml和activity中做到这一点。这张照片是我的键盘型号。它只需要数字。

答案

首先,您将需要一个keyboard.xml文件,该文件将放在res/xml文件夹中(如果该文件夹不存在,则创建它)。

<?xml version="1.0" encoding="utf-8"?> 
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
    android:keyWidth="15%p"
    android:keyHeight="15%p" >

    <Row>
        <Key android:codes="1"    android:keyLabel="1" android:horizontalGap="4%p"/>
        <Key android:codes="2"    android:keyLabel="2" android:horizontalGap="4%p"/>
        <Key android:codes="3"    android:keyLabel="3" android:horizontalGap="4%p" />
        <Key android:codes="4"    android:keyLabel="4" android:horizontalGap="4%p" />
        <Key android:codes="5"    android:keyLabel="5" android:horizontalGap="4%p" />
    </Row>
    <Row>
        <Key android:codes="6"    android:keyLabel="6" android:horizontalGap="4%p"/>
        <Key android:codes="7"    android:keyLabel="7" android:horizontalGap="4%p"/>
        <Key android:codes="8"    android:keyLabel="8" android:horizontalGap="4%p" />
        <Key android:codes="9"    android:keyLabel="9" android:horizontalGap="4%p" />
        <Key android:codes="0"    android:keyLabel="0" android:horizontalGap="4%p" />
    </Row>

    <Row>
        <Key android:codes="-1"    android:keyIcon="@drawable/backspace" android:keyWidth="34%p" android:horizontalGap="4%p"/>
        <Key android:codes="100"    android:keyLabel="Enter" android:keyWidth="53%p" android:horizontalGap="4%p"/>
    </Row>
 </Keyboard>

**请注意,您必须创建backspace drawable并将其放在res / drawable-ldpi文件夹中,其尺寸非常小(如18x18像素)

然后在您希望它使用的xml文件中(TextView所在的位置),您应该添加以下代码:

<RelativeLayout
 ...
>

        .....


        <android.inputmethodservice.KeyboardView
             android:id="@+id/keyboardview"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:layout_alignParentBottom="true"
             android:layout_centerHorizontal="true"
             android:focusable="true"
             android:focusableInTouchMode="true"
             android:visibility="gone" 
         />

        ......


</RelativeLayout>

**请注意,您将放置android.inputmethodservice.KeyboardView的xml文件必须是RelativeLayout才能设置alignParentBottom="true"(通常键盘显示在屏幕底部)

然后你需要在onCreateActivity函数中添加以下代码,该函数处理你想要将键盘连接到的TextView

    // Create the Keyboard
    mKeyboard= new Keyboard(this,R.xml.keyboard);

    // Lookup the KeyboardView
    mKeyboardView= (KeyboardView)findViewById(R.id.keyboardview);
    // Attach the keyboard to the view
    mKeyboardView.setKeyboard( mKeyboard );

    // Do not show the preview balloons
    //mKeyboardView.setPreviewEnabled(false);

    // Install the key handler
    mKeyboardView.setOnKeyboardActionListener(mOnKeyboardActionListener);

**请注意,mKeyboardmKeyboardView是您必须创建的私有类变量。

然后你需要以下函数来打开键盘(你必须通过onClick xml属性将它与TextView相关联)

    public void openKeyboard(View v)
    {
       mKeyboardView.setVisibility(View.VISIBLE);
       mKeyboardView.setEnabled(true);
       if( v!=null)((InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0);
    }

最后你需要能够处理你事件的OnKeyboardActionListener

private OnKeyboardActionListener mOnKeyboardActionListener = new OnKeyboardActionListener() {
    @Override public void onKey(int primaryCode, int[] keyCodes) 
    {
         //Here check the primaryCode to see which key is pressed 
         //based on the android:codes property
         if(primaryCode==1)
         {
            Log.i("Key","You just pressed 1 button");
         }
    }

    @Override public void onPress(int arg0) {
    }

    @Override public void onRelease(int primaryCode) {
    }

    @Override public void onText(CharSequence text) {
    }

    @Override public void swipeDown() {
    }

    @Override public void swipeLeft() {
    }

    @Override public void swipeRight() {
    }

    @Override public void swipeUp() {
    }
};

希望有所帮助!

大部分代码都找到了here

另一答案

System keyboard

这个答案告诉我们如何制作一个可以在用户手机上安装的任何应用程序中使用的自定义系统键盘。如果你想制作一个只能在你自己的应用程序中使用的键盘,那么see my other answer

以下示例如下所示。您可以为任何键盘布局修改它。

enter image description here

以下步骤说明如何创建可用的自定义系统键盘。我尽可能地尝试删除任何不必要的代码。如果您还需要其他功能,我最后会提供更多帮助的链接。

1. Start a new Android project

我将我的项目命名为“自定义键盘”。随便打电话给你。这里没有什么特别的。我将离开MainActivity和“Hello World!”布局原样。

2. Add the layout files

将以下两个文件添加到应用程序的res/layout文件夹中:

  • keyboard_view.xml
  • key_preview.xml

keyboard_view.xml

这个视图就像一个容纳我们键盘的容器。在这个例子中只有一个键盘,但你可以添加其他键盘并将它们交换进这个KeyboardView

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

</android.inputmethodservice.KeyboardView>

key_preview.xml

键预览是按键盘键时弹出的布局。它只显示你正在按下的键(如果你的大指,胖指覆盖它)。这不是一个多选弹出窗口。为此你应该看看Candidates view

<?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="@android:color/white"
    android:textColor="@android:color/black"
    android:textSize="30sp">
</TextView>

3. Add supporting xml files

xml文件夹中创建一个res文件夹。 (右键单击res并选择New> Directory。)

然后将以下两个xml文件添加到其中。 (右键单击xml文件夹,然后选择“新建”>“XML资源文件”。)

  • number_pad.xml
  • method.xml

number_pad.xml

这是它开始变得更有趣的地方。这个Keyboard定义了keys的布局。

<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
    android:keyWidth="20%p"
    android:horizontalGap="5dp"
    android:verticalGap="5dp"
    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"/>
        <Key android:codes="52" android:keyLabel="4"/>
        <Key android:codes="53" android:keyLabel="5" android:keyEdgeFlags="right"/>
    </Row>

    <Row>
        <Key android:codes="54" android:keyLabel="6" android

以上是关于如何制作Android自定义键盘?的主要内容,如果未能解决你的问题,请参考以下文章

Android - 如何将自定义对象传递给片段

Android:如何从键盘上删除自定义键盘按钮?

使用完成按钮关闭我的自定义键盘

如何在自定义键盘中快速制作返回按钮

Android:在自定义键盘上添加 imageButton

为动态创建的 Android 片段提供自定义属性值