7

我正在尝试为不是传统键盘的 android 创建一个 IME(对应于不同字母的键行),但我无法找到有关如何执行此操作的有用资源,因为 SDK 中的所有代码示例都使用键盘 API它是内置的功能。

我在 XML 文件中设计了 IME 的界面,就好像它只是应用程序中的一个活动,但我在他们的演示中迷失了方向,因为他们的键盘只是从不同样式的 XML 结构构建的对象。

如果有人有一个不使用传统键盘结构的开源项目的链接,或者可以简单地指导我在 IME 窗口上显示我已经构建的 UI,我想我可以解决剩下的问题。

如果您需要更多具体信息,请随时询问。提前致谢。

4

1 回答 1

6

SoftKeyboard示例的结构实际上与您需要的类似,尽管您不知道它。让我们分解一下——这是一个完整的存根,它充当输入法服务并使用标准 XML 键盘:

import android.inputmethodservice.InputMethodService;
import android.inputmethodservice.Keyboard;

public class MyInputMethod extends InputMethodService {
    private Keyboard mKeyboard;

    @Override public void onInitializeInterface() {
        mKeyboard = new Keyboard(this, R.xml.qwerty);
    }

    @Override public View onCreateInputView() {
        mInputView = (KeyboardView) getLayoutInflater().inflate(
                R.layout.input, null);
        mInputView.setKeyboard(mKeyboard);
        return mInputView;
    }
}

请注意,命名了两个 XML 文档。第一个,res/xml/qwerty.xml定义布局,以便KeyboardView类知道如何绘制键盘。

但是它膨胀的布局res/layout/input.xml由以下组成(简化):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
    <android.inputmethodservice.KeyboardView android:id="@+id/keyboard" />
</LinearLayout>

这就是以声明方式创建视图所需的全部内容!创建独立文件View与创建Activity. 您没有标准的活动生命周期,但两种环境都允许您访问 XML 布局。您需要做的就是使用充气器,引用您需要的任何子视图,然后返回主视图。

因此,希望您在考虑到这一点后能够扩展您的布局。


如果您的布局足够简单,您甚至不需要使用 XML 布局。如果您的输入法可以完全由单个视图组成,您可以直接在onCreateInputView. 这是一个不使用任何 XML 的完整存根输入法服务:

public class MyInputMethod extends InputMethodService {
    MyView view;

    @Override
    public View onCreateInputView() {
        return view = new MyView(this);
    }

}

(当然,清单和res/xml/method.xml文件中的样板文件仍然存在。)

于 2011-06-23T03:08:30.917 回答