まだ、わかってないことが多いが、前回ソフトウェアキーボードの表示ができた。しかし、表示したはいいが、Viewが非表示になっても、キーボードが表示されっぱなしになってしまった。何かイベントひろって、そこでキーボード非表示にすればいいんだろうか?まぁ、今回はそこではなく、確定文字列の表示をしてみた。InputConnectionのcommitTextに確定文字列が来るのは想像できたので、BaseInputConnectionを継承して、commitTextをオーバーライドした。あと、getEditableが何なのか気になったが、とりあえずSpannableStringBuilderを返すようにした。
package test.edit; import android.content.Context; import android.view.View; import android.view.MotionEvent; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import android.view.inputmethod.BaseInputConnection; import android.view.inputmethod.InputMethodManager; import android.graphics.Color; import android.graphics.Canvas; import android.graphics.Paint; import android.text.Editable; import android.text.SpannableStringBuilder; public class EditView extends View{ private InputMethodManager manager; private String commit = ""; public EditView(Context context){ super(context); manager = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE); setFocusable(true); setFocusableInTouchMode(true); setBackgroundColor(Color.WHITE); } @Override public boolean onTouchEvent(MotionEvent event){ requestFocus(); manager.showSoftInput(this, InputMethodManager.RESULT_SHOWN); return true; } @Override public boolean onCheckIsTextEditor(){ return true; } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs){ return new TextInputConnection(this, false); } @Override protected void onDraw(Canvas canvas){ Paint paint = new Paint(); canvas.drawText(commit, 0, 16, paint); } public class TextInputConnection extends BaseInputConnection{ public TextInputConnection(View targetView, boolean fullEditor){ super(targetView, fullEditor); } @Override public boolean commitText(CharSequence text, int newCursorPosition){ boolean ret = super.commitText(text, newCursorPosition); commit = text.toString(); invalidate(); return ret; } @Override public Editable getEditable(){ return new SpannableStringBuilder(); } } }