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
ファイルのボイラープレートはそのままです。)