特に考慮せず、Activityのレイアウトを作成するとAndroidは自動認識で一番初めのEditTextにカーソルをあてる動作をします。この機能は非常に便利ではありますが、時と場合によっては避けたいケースがあります。そんな時の対処法の紹介です。
左図のように画面起動時にAndroidの初期動作として画面一番初めのEditTextにカーソルがあたってしまう。どうにかしてカーソルがあたらない状態で画面を起動したい。
EditTextにカーソルやフォーカスを適用させない方法は非常に簡単でxmlファイルの記述だけで済みます。以下のようにandroid:cursorVisibleとandroid:focusableInTouchModeを「false」にすることで
Androidの自動認識でEditTextにカーソルやフォーカスがあたることを防ぐことができます。
しかし、ここで大きな問題点があります。
xmlファイルで上記設定をしてしまうと該当EditTextには二度とカーソルやフォーカスが適用できなくなってしまいます。カーソルやフォーカスが適用されないことを仕様とする場合は上記設定だけでいいわけですが、そうでない場合は困ります。
自動認識のカーソルやフォーカス適用だけ防ぎ、任意で適用させる為にはActivity側のjavaコードで対応することができます。簡単に言うと、EditTextのタッチイベントでフォーカスを有効にしてあげればいいわけですね。
こんな感じで記述します。
edt1 = (EditText)findViewById(R.id.edt1);
edt1.setOnClickListener(new OnClickListener() {
@OverRide
public void onClick(View v) {
v.setFocusable(true);
v.setFocusableInTouchMode(true);
v.requestFocus();
InputMethodManager im =
(InputMethodManager)setSystemService(Context.INPUT_METHOD_SERVICE);
if (null != im) {
im.showSoftInput(v,0);
}
}
});
InputMethodManagerの記述は入力用キーボードを表示させる為に必要なコードです。
以上で画面起動時のカーソルやフォーカスの適用を防ぐ方法、および必要な時にカーソル、フォーカスを適用させる方法の解説となります。
EditTextで数値のみに対応したいケースがよくありますよね。
そんな時の対応方法です。(キーボード入力も数値のみの対応)
基本的にアクティビティデザインのxmlファイル内の記述ですべて対応が可能です。
<EditText
android:id="@+id/startCnt"
android:layout_width="wrap_content""
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:digits="01234567890"
android:gravity="right"
android:inputType="number"
android:maxLength="5"
android:text="0" />
■EditTextに数値のみ入力を可能にしたい制御は以下の記述で対応が可能です。
android:digits=”01234567890″
■キーボード入力で数値のみ対応した場合は以下の記述が必要になります。
android:inputType=”number”
■EditTextへの入力桁数の制御も以下の記述で対応可能になります。
android:maxLength=”5″ ※この場合は5桁対応。
今回は数値のみの入力制御対応でしたが、inputTypeを利用することによりいろんなタイプの入力制御を行うことが可能です。以下に一覧をまとめておきますの参考にどうぞ。
inputType | 内容説明 |
---|---|
text | テキスト入力 |
textCapCharacters | 大文字入力 |
textCapWords | 先頭文字を大文字にする場合 |
textCapSentences | 文章の先頭を大文字にする場合 |
textAutoCorrect | 文字入力を自動修正させる場合 |
textAutoComplete | 文字の補完入力に対応させる場合 |
textMultiLine | 複数行入力させる場合 |
textUri | URLを入力させるさせる場合 |
textEmailAddress | メールアドレスを入力させる場合 |
textEmailSubject | メール件名を入力させる場合 |
textShortMessage | ショートメッセージを入力させる場合 |
textLongMessage | ロングメッセージを入力させる場合 |
textPersonName | 人名を入力させる場合 |
textPostalAddress | 住所を入力させる場合 |
textPassword | パスワードを入力させる場合 |
textVisiblePassword | パスワード入力を表示させて入力する場合 |
textWebEditText | THMLを入力させる場合 |
textFilter | 他のデータでフィルタされた文字を入力する場合 |
textPhonetic | 発音記号を入力させる場合 |
numberSigned | 符号付きの数値を入力させる場合 |
numberDecimal | 少数入力をさせる場合 |
phone | 電話番号を入力させる場合 |
datetime | 日時を入力させる場合 |
date | 日付を入力させる場合 |
time | 時刻を入力させる場合 |
最近のコメント