0年 0月 の投稿一覧

EditTextに自動でカーソルをあてたくない場合の対処法

特に考慮せず、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の入力制御

EditTextを数値のみ許可する

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 時刻を入力させる場合