在运行时将行和键添加到android中的自定义键盘

时间:2016-08-30 07:03:47

标签: android keyboard custom-keyboard

我正在开发一个应用程序,我需要在java代码中以编程方式创建自定义键盘的行和键,而不是使用XML。 这可能吗 ?如果是,我们如何做到这一点。

目前,我正在使用XML并以这种方式创建行: -

<Keyboard android:keyWidth="10.0%p" 
android:keyHeight="@dimen/key_height" android:horizontalGap="0.0px"android:verticalGap="0.0px"
xmlns:android="http://schemas.android.com/apk/res/android">

<Row android:rowEdgeFlags="top" >
    <Key  android:codes="-21"   android:keyIcon="@drawable/arbiclinenew" />
    <Key  android:codes="-51"  android:keyIcon="@drawable/recentlinenew" />

</Row>

基本上,我需要在键盘上显示"recent"视图,该视图会显示用户最近选择的所有表情符号,与whatsapp相同。 请帮忙...... !!!!

1 个答案:

答案 0 :(得分:1)

最后,我可以创建自己的自定义键盘。我们可以创建自定义键盘布局来显示最近的按钮。例如:

String mimeType = "video/avc";
decoder = MediaCodec.createDecoderByType(mimeType);
mformat = MediaFormat.createVideoFormat(mimeType, 1920, 1080);

while (!Thread.interrupted()) {
    byte[] data = new byte[size];
    bin.read(data, 0, size);
    if (data is SPS frame) {
        mformat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 0);
        mformat.setByteBuffer("csd-0", ByteBuffer.wrap(data));
        continue;
    }

    if (data is PPS frame) {
        mformat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 0);
        mformat.setByteBuffer("csd-1", ByteBuffer.wrap(data));
        decoder.configure(mformat. surface, null, 0);
        decoder.start();
        is_decoder_configured = true;
        continue;
    }

    if (!is_decoder_configured)
        continue;

    index = decoder.dequeueInputBuffer(1000);
    if (index < 0) {
        Log.e(TAG, "Dequeue in put buffer failed..\n");
        continue;
    }

    buf = decoder.getInputBuffer(index);
    if (buf == null)
        continue;
    buf.put(data);

    decoder.queueInputBuffer(index, 0, data.length, 0, 0);
    int outputBufferId = decoder.dequeueOutputBuffer(info, 1000);
    switch (outputBufferId) {
        case MediaCodec.INFO_OUTPUT_FORMAT_CHANGED:
            Log.i("DecodeActivity", "New format " + decoder.getOutputFormat());
            break;
        case MediaCodec.INFO_TRY_AGAIN_LATER:
            Log.i("DecodeActivity", "dequeueOutputBuffer timed out!");
            break;
        default:
            Log.i(TAG, "Successfully decoded the output : " + outputBufferId);
            decoder.releaseOutputBuffer(outputBufferId, true);
            break;
    }
}

if (is_decoder_configured()) {
    decoder.stop();
    decoder.release();
}

现在,假设在任何按键点击时,您需要显示表情符号或任何其他视图,然后我们可以设置键盘可见性:不可见并且可以显示您自己的布局。