私はアンドロイドが初めてです。アプリケーション専用のカスタム キーボードを使用してアプリケーションを作成しようとしています。配布用の一般的なキーボードではありません。基本的に私のテストは、次のようなレイアウトにすることです。
Relative Layout
Relative Layout id tolayouot
EditText id userID
Button
LinearLayout alignbottomparent=TRUE
InputMethodService.KeyboardView id kv
したがって、編集ボックスとボタンのある上部セクションがあり、下部セクションはキーボードです。ボタンを押すと、カスタム キーボードが表示されます。次に、EditText ボックスに入力できるようにしたいと思います。
プライベート変数を作成して、keyboardactionlistener を実装しました。それは基本的に例に従い、ログメッセージのみを出力します。
private OnKeyboardActionListener mykal = new OnKeyboardActionListener()
{
@Override
public void swipeUp() {
Log.d(TAG, "swipeUp");
}
@Override
public void swipeRight() {
Log.d(TAG, "swipeRight");
}
@Override
public void swipeLeft() {
Log.d(TAG, "swipeLeft");
}
@Override
public void swipeDown() {
Log.d(TAG, "swipeDown");
}
@Override
public void onText(CharSequence text) {
Log.d(TAG, "onText? \"" + text + "\"");
}
@Override
public void onRelease(int primaryCode) {
Log.d(TAG, "onRelease? primaryCode=" + primaryCode);
}
@Override
public void onPress(int primaryCode) {
Log.d(TAG, "onPress? primaryCode=" + primaryCode);
}
@Override
public void onKey(int primaryCode, int[] keyCodes) {
Log.d(TAG, "onKey? primaryCode=" + primaryCode);
int n1 = 0; // -1 count
for (int keyCode : keyCodes) {
if (keyCode == -1) {
n1++;
continue;
}
Log.v(TAG, "keyCode=" + keyCode);
}
Log.v(TAG, "keyCode=-1 *" + n1);
}
};
}
これが作成時のコードです
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_example);
Button b = (Button) this.findViewById(R.id.tstbtn);
myedit = (EditText) this.findViewById(R.id.user_ID);
rl = (RelativeLayout) this.findViewById(R.id.toplayout);
b.setOnClickListener(clistner);
KeyboardView keyboardView = (KeyboardView) findViewById(R.id.keyboardView);
Keyboard keyboard = new Keyboard(this, R.xml.tstkbd);
keyboardView.setKeyboard(keyboard);
keyboardView.setEnabled(true);
keyboardView.setPreviewEnabled(true);
myedit.setOnTouchListener(mytouch);
// keyboardView.setOnKeyListener(this);
keyboardView.setOnKeyboardActionListener(mykal);
//hide the default keyboard
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
そのため、テストを実行すると、デフォルトのキーボードが思い通りに消え、ボタンをクリックするとキーボードが表示されます。キーを押すと、keyboardactionlistener のすべてのログ メッセージがデバッガに表示されるので、キーボードは機能しています。EditText にフォーカスを設定できますが、カスタム キーボードのキーをクリックしても、EditText ボックスにテキストが表示されません。
カスタム キーボードからのキープレスをスムーズに取得して EditText ボックスに登録する方法はありますか?
KeyBoardactionListener の OnKey イベントを使用して EditText ボックス内のテキストを操作できることはわかっていますが、組み込み関数を使用したいと考えています。
私が試してみました:
- イベント メッセージを EditText と RelativeLayout の toprl に送信しましたが、クラッシュしました。
- EditText の onTouchListener を設定します。
これを達成する唯一の方法は、InputMethodService を作成することですか?
これがうまくいかない理由を誰か説明してもらえますか???
以下の 2 つの例は、私が使用しようとしていたものです。
http://androidpadanam.wordpress.com/2013/05/29/customkeyboard-example/ http://www.infiniterecursion.us/2011/02/android-activity-custom-keyboard.html