Android输入法中类似Gboard的搜索栏

6

我想在 Android 输入法(IME)内部创建一个类似 Gboard 的搜索栏,如下图所示。

Gboard 示例:

Gboard 示例

我已经在 Keyboardview.xml 中实现了一个 EditText,如下图所示。

我的实现:

我的实现

main_keyboard_frame.xml

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="120dp"
    android:background="#cf060610"
    android:id="@+id/search_panel"
    android:visibility="invisible">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:hint="sdsddsd"
        android:id="@+id/ed"/>



</RelativeLayout>

但问题在于,当我点击位于我的输入法之外的EditText 2时,我的输入法会打开,其中包含如上图所示的EditText 1。现在,当我从输入法中输入一些内容时,它会写在EditText 2而不是EditText 1上,因此我想知道这背后的问题是什么?与焦点有关吗?还是其他什么原因?


阿卜杜勒,你找到任何解决方案了吗? - Bhavin Patel
请分享一下如果你找到了解决方案? - Kanchan
1
是的,当搜索面板打开时,您可以停止提交键入的字符,反之亦然。 - Abdul Wajid
@AbdulWajid,您能制作解决方案的代码片段吗? - Zainal Fahrudin
1个回答

1
因此,我从Abdul Wajid上面的评论中得到了解决这个问题的线索。
我使用的是LatinIME。只需要更新这一行即可。
public void onEvent(final Event event) {
        final InputTransaction completeInputTransaction =
                mInputLogic.onCodeInput(mSettings.getCurrent(), event);
        updateStateAfterInputTransaction(completeInputTransaction);
        mKeyboardSwitcher.onEvent(event, getCurrentAutoCapsState(), getCurrentRecapitalizeState());
}

停止提交按下某些逻辑情况下的事件键。
public void onEvent(final Event event) {
    if (mEditField.isFocused()){
        Log.d("LatinIME : field focused", "On Event: " + event.getTextToCommit() );
        mEditField.append(event.getTextToCommit());
    } else {
        final InputTransaction completeInputTransaction =
                mInputLogic.onCodeInput(mSettings.getCurrent(), event);
        updateStateAfterInputTransaction(completeInputTransaction);
        mKeyboardSwitcher.onEvent(event, getCurrentAutoCapsState(), getCurrentRecapitalizeState());
    }
}

完成后,您可以控制所按下的事件类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接