Androidアプリ入門 No.09 EditTextの入力制限関連属性
今風に書き直した記事がありますので、合わせて参照ください。
blog.webarata3.link
EditText
EditTextはTextViewのサブクラスであるためTextViewと同じ属性が使用できる。ここではEditTextで使える属性を説明する。
入力制限関連属性
入力制限やIMEの制御をする属性は以下となる。
属性 | 説明 |
---|---|
digits | 入力可能な数値、記号の文字セットを指定する。指定した文字以外の入力ができなくなる。 |
inputType | 入力する内容に応じたソフトウェアキーボードを表示する。 |
まずdigitsの例を見る。共通のstrigns.xmlは以下。
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, MainActivity!</string> <string name="app_name">ActivityTest</string> <style name="commonLayout"> <item name="android:orientation">horizontal</item> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">wrap_content</item> </style> <style name="commonLabel"> <item name="android:layout_width">100dp</item> <item name="android:layout_height">wrap_content</item> <item name="android:textColor">#000</item> <item name="android:textSize">30sp</item> </style> <style name="common"> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:textColor">#000</item> <item name="android:textSize">30sp</item> </style> </resources>
main.xmlは以下。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#fff" > <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="0〜9-" /> <EditText style="@style/common" android:digits="01234567890-" /> </LinearLayout> <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="偶数" /> <EditText style="@style/common" android:digits="02468" /> </LinearLayout> <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="abc" /> <EditText style="@style/common" android:digits="abc" /> </LinearLayout> </LinearLayout>
実行例は以下となる。画面ではわからないが、指定した文字しか入力できないようになっている。
次にinputTypeの入力制限を説明する。制限は以下のものが使用できる。制限は「|」で区切って複数指定できる。
種類 | 説明 |
---|---|
none | 入力不可。 |
text | 普通のテキスト。 |
textCapCharacters | すべて大文字で入力する場合。 |
textCapWords | 単語の先頭を大文字で入力する場合。 |
textCapSentences | 文章の先頭を大文字で入力する場合。 |
textAutoCorrect | 文字の入力を自動で修正する場合。 |
textAutoComplete | 文字の補完入力する場合。 |
textMultiLine | 文字を複数行入力する場合。 |
textImeMultiLine | 通常の文字入力時は複数入力を許可せず、IMEによって複数行入力を設定する場合。 |
textUri | URLを入力する場合。 |
textEmailAddress | メールアドレスを入力する場合。 |
textEmailSubject | メールの件名を入力する場合。 |
textShortMessage | ショートメッセージを入力する場合。 |
textLongMessage | ロングメッセージを入力する場合。 |
textPersonName | 人名を入力する場合。 |
textPostalAddress | 住所を入力する場合。 |
textPassword | パスワードを入力する場合。 |
textVisiblePassword | パスワードの文字を見せて入力する場合。 |
textWebEditText | HTMLを入力する場合。 |
textFilter | 他のデータでフィルタされた文字を入力。 |
textPhonetic | 発音記号を入力する場合。 |
number | 数値入力する場合。 |
numberSigned | 符号付きの数値を入力する場合。 |
numberDecimal | 小数入力する場合。 |
phone | 電話番号を入力する場合。 |
datetime | 日付時刻を入力する場合。 |
date | 日付を入力する場合。 |
time | 時刻を入力する場合。 |
まず、わかりやすい数値関係の例を挙げる。スタイルをstrings.xmlに定義する。
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, MainActivity!</string> <string name="app_name">ActivityTest</string> <style name="commonLayout"> <item name="android:orientation">horizontal</item> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">wrap_content</item> </style> <style name="commonLabel"> <item name="android:layout_width">100dp</item> <item name="android:layout_height">fill_parent</item> <item name="android:textColor">#000</item> <item name="android:textSize">15sp</item> <item name="android:gravity">top</item> </style> <style name="common"> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:textColor">#000</item> <item name="android:textSize">30sp</item> </style> </resources>
次に、main.xmlを以下のようにする。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#fff" > <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="number" /> <EditText style="@style/common" android:inputType="number" /> </LinearLayout> <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="numberSigned" /> <EditText style="@style/common" android:inputType="numberSigned" /> </LinearLayout> <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="numberDecimal" /> <EditText style="@style/common" android:inputType="numberDecimal" /> </LinearLayout> <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="numberSigned|numberDecimal" /> <EditText style="@style/common" android:inputType="numberSigned|numberDecimal" /> </LinearLayout> <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="phone" /> <EditText style="@style/common" android:inputType="phone" /> </LinearLayout> <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="datetime" /> <EditText style="@style/common" android:inputType="datetime" /> </LinearLayout> <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="date" /> <EditText style="@style/common" android:inputType="date" /> </LinearLayout> <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="time" /> <EditText style="@style/common" android:inputType="time" /> </LinearLayout> </LinearLayout>
実行結果は以下。おおよそ入力できる文字をカバーした例。面白いのはtimeの入力でam、pmだけアルファベットが入力できる。大文字のAM、PMは入力できない。
次に、Web、メール関連。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#fff" > <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="textUri" /> <EditText style="@style/common" android:inputType="textUri" /> </LinearLayout> <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="textEmailAddress" /> <EditText style="@style/common" android:inputType="textEmailAddress" /> </LinearLayout> <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="textPassword" /> <EditText style="@style/common" android:inputType="textPassword" /> </LinearLayout> <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="textVisiblePassword" /> <EditText style="@style/common" android:inputType="textVisiblePassword" /> </LinearLayout> <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="textWebEditText" /> <EditText style="@style/common" android:inputType="textWebEditText" /> </LinearLayout> </LinearLayout>
エミュレータだと、実際に動きはよくわからないが実機で動かすと動作が微妙に異なる。まず、エミュレータの画面は以下。
実機(GALAXY S)だとtextURIの場合には「/」が表示され、textEmailAddressを選択すると「/」のところが「@」になったりする。
最後に、改行の制御を確認する。main.xmlは以下。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#fff" > <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="text" /> <EditText style="@style/common" android:inputType="text" /> </LinearLayout> <LinearLayout style="@style/commonLayout" > <TextView style="@style/commonLabel" android:text="textMultiLine" /> <EditText style="@style/common" android:inputType="textMultiLine" /> </LinearLayout> </LinearLayout>
実行結果は以下。textMultiLineは入力域の端まで行くと自動で文字列を折り返す。また、改行を入力して任意に折り返すこともできる。