【问题标题】:Android: Non-Keyboard IMEAndroid:非键盘输入法
【发布时间】:2011-09-20 21:00:06
【问题描述】:

我正在尝试为不是传统键盘(对应于不同字母的键行)的 android 创建一个 IME,但由于 SDK 中的所有代码示例都使用一个键盘 API,它是内置函数。

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

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

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

【问题讨论】:

  • 请帮助我如何设置自己的键盘? .我已经使用了单独的应用程序。我想在文本框(左或右)附近显示小键盘。这是我的问题。 stackoverflow.com/questions/7357876/…我用Android API demo做了我自己的键盘...

标签: android xml android-input-method


【解决方案1】:

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 文件仍然存在。)

【讨论】:

  • 非常感谢,我被他们所有的键盘类和方法所吸引,以至于忽略了这么简单的疏忽。
  • 请帮我解决这个问题。如果你成功做到了...请帮帮我stackoverflow.com/questions/7357876/…
  • 我想这个线程已经死了,但是清单中到底需要什么?
  • @Zwade 我认为它只是一个响应android.view.InputMethod 操作的&lt;service&gt;,但请检查软键盘示例以确定。
  • @JoshLee 我正在阅读您的解决方案,以了解如何将 RelativeLayout 用于自定义键盘而不是默认键盘布局,但我很困惑。您能否发布一个代码示例,其中有普通的keyboard.xml 文件,并且有一个用于实际键盘设计的Relative Layout 文件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 2014-11-06
相关资源
最近更新 更多