7

従来のキーボード (さまざまな文字に対応するキーの行) ではない Android 用の IME を作成しようとしていますが、SDK のすべてのコード例がキーボード API を使用しているため、その方法に関する役立つリソースを見つけるのに苦労しています。そしてそれは関数に組み込まれています。

アプリケーション内の単なるアクティビティであるかのように、XML ファイルで IME のインターフェイスを設計しましたが、キーボードは異なるスタイルの XML 構造から構築された単なるオブジェクトであるため、デモで迷子になっています。

従来のキーボード構造を使用しないオープン ソース プロジェクトへのリンクを誰かが持っている場合、または既に構築した UI を IME ウィンドウに表示する方法を教えてくれる場合は、残りを理解できると思います。

さらに具体的な情報が必要な場合は、お気軽にお問い合わせください。前もって感謝します。

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;
    }
}

2 つの 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 レイアウトを使用する必要さえありません。入力メソッドが完全に 1 つのビューで構成されている場合は、それを で直接インスタンス化できます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 に答える