今回は基本中の基本のソフトウェアキーボードの操作についてまとめてみました。
キーボードを開く
InputMethodManager imm = (InputMethodManager ) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(mEditText, InputMethodManager.SHOW_FORCED);
キーボードを閉じる
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
ここまでは簡単な例です。
ここから多分実用的になってきます。
起動時にキーボードが開くのを防ぐ
EditText等をレイアウトに入れていると、起動時に自動でキーボードが開いてしまうことがあると思います。それを防ぐには、onCreate()のsetContextView()の後で、
getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
キーボードが開いたのを検知する
キーボードが開いたかどうかをプログラム側で知りたい場合に利用します。これは、LinearLayoutをextendsして、通知する為のListenerを登録します。
まずはLinearLayoutDetectsSoftKeyboard.javaを作成
public class LinearLayoutDetectsSoftKeyboard extends LinearLayout { /** * @param context * @param attrs */ public LinearLayoutDetectsSoftKeyboard(Context context, AttributeSet attrs){ super(context, attrs); } public interface Listener { /** * @param isOpen whether soft keyboard is open */ public void onSoftKeyboardChanged(boolean isOpen); } private Listener listener; /** * @param listener LinearLayoutDetectsSoftKeyboard.Listener */ public void setListener(Listener listener){ this.listener = listener; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ if(listener != null){ int height = MeasureSpec.getSize(heightMeasureSpec); Activity activity = (Activity) getContext(); Rect rect = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); int statusBarHeight = rect.top; int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight(); int diff = (screenHeight - statusBarHeight) - height; listener.onSoftKeyboardChanged(diff > 128); } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }
起動時にListenerを登録します。
public class MyActivity extends Activity implements LinearLayoutDetectsSoftKeyboard.Listener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); setContentView(R.layout.main); ((LinearLayoutDetectsSoftKeyboard)findViewById(R.id.main_layout)) .setListener(this); } @Override public void onSoftKeyboardChanged(boolean isOpen) { // TODO: do something here } }
これでonSoftKeyboardChanged()にソフトキーボードに変化があった場合に通知が来ます。
0 件のコメント:
コメントを投稿