Android
EditText
サーチ…
EditTextsの操作
EditTextは、Androidアプリの標準テキスト入力ウィジェットです。ユーザーがアプリにテキストを入力する必要がある場合、これが主な目的です。
EditText
EditTextの動作をカスタマイズするために設定できる多くの重要なプロパティがあります。これらのうちのいくつかを以下に示します。さらに詳しい入力フィールドの詳細については、公式のテキストフィールドガイドを参照してください。
使用法
EditTextは、すべてのデフォルト動作を含むレイアウトに、次のXMLで追加されます。
<EditText
android:id="@+id/et_simple"
android:layout_height="wrap_content"
android:layout_width="match_parent">
</EditText>
EditTextは単にTextViewの細い拡張であり、同じプロパティをすべて継承することに注意してください。
値の取得
EditTextに入力されたテキストの値を取得する方法は次のとおりです。
EditText simpleEditText = (EditText) findViewById(R.id.et_simple);
String strValue = simpleEditText.getText().toString();
さらなるエントリのカスタマイズ
エントリを1行のテキストに制限したいかもしれません(改行を避ける):
<EditText
android:singleLine="true"
android:lines="1"
/>
digits属性を使用すると、フィールドに入力できる文字を制限することができます。
<EditText
android:inputType="number"
android:digits="01"
/>
これにより、入力された数字は「0」と「1」に制限されます。私たちは文字の総数を以下のように制限したいかもしれません:
<EditText
android:maxLength="5"
/>
これらのプロパティを使用して、テキストフィールドの予想される入力動作を定義できます。
色の調整
android:textColorHighlight
プロパティを使用して、EditText内で選択したテキストのハイライトの背景色を調整できます:
<EditText
android:textColorHighlight="#7cff88"
/>
プレースホルダヒントの表示
EditTextコントロールのヒントを設定して、ユーザーに特定の入力を求めるプロンプトを表示することができます。
<EditText
...
android:hint="@string/my_hint">
</EditText>
ヒント
ボトムラインの色を変更する
AppCompatライブラリを使用していると仮定して、スタイルcolorControlNormal、colorControlActivated、およびcolorControlHighlightをオーバーライドできます。
<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorControlNormal">#d32f2f</item>
<item name="colorControlActivated">#ff5722</item>
<item name="colorControlHighlight">#f44336</item>
</style>
DialogFragment内にこれらのスタイルが適用されていない場合は、onCreateView()メソッドに渡されたLayoutInflaterを使用すると既知のバグがあります。
この問題は既にAppCompat v23ライブラリで修正されています。アップグレード方法については、このガイドを参照してください。別の一時的な回避策は、onCreateView()メソッドに渡されたインフレータの代わりにActivityのレイアウトインフレータを使用することです。
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_fragment, container);
}
EditText入力のリッスン
EditTextへの変更をリッスンする方法と、変更が発生したときにアクションを実行する方法については、基本的なイベントリスナーのcliffnotesを参照してください。
浮動ラベル・フィードバックの表示
伝統的に、EditTextは、ユーザが入力を開始した後でヒントメッセージを隠す(上記で説明した)。さらに、検証エラーメッセージは開発者が手動で管理する必要がありました。
TextInputLayout
を使用すると、ヒントやエラーメッセージを表示するためにフローティングラベルを設定できます。 詳細はこちらをご覧ください 。
InputTypeのカスタマイズ
テキストフィールドは、番号、日付、パスワード、電子メールアドレスなどの異なる入力タイプを持つことができます。タイプは、フィールド内でどのような種類の文字が許可されるかを決定し、仮想キーボードが頻繁に使用される文字のレイアウトを最適化するように促します。
デフォルトでは、 EditText
コントロール内のテキストコンテンツはプレーンテキストとして表示されます。 inputType
属性を設定することで、電話番号やパスワードなどのさまざまな種類の情報の入力を容易にすることができます。
<EditText
...
android:inputType="phone">
</EditText>
最も一般的な入力タイプは次のとおりです。
タイプ | 説明 |
---|---|
textUri | URIとして使用されるテキスト |
textEmailAddress | 電子メールアドレスとして使用されるテキスト |
textPersonName | 人の名前であるテキスト |
textPassword | 隠されるべきパスワードであるテキスト |
数 | 数値のみのフィールド |
電話 | 電話番号を入力する場合 |
日付 | 日付を入力する |
時間 | 時間を入力する |
textMultiLine | フィールド内に複数行のテキストを許可する |
android:inputType
では、新しい単語をすべて大文字にするか、自動補完やスペル候補などの機能を使用するかなど、特定のキーボード動作を指定することもできます。
キーボードの動作を定義する一般的な入力タイプの値を次に示します。
タイプ | 説明 |
---|---|
textCapSentences | 新しい文章ごとに最初の文字を大文字にする通常のテキストキーボード |
textCapWords | すべての単語を大文字にする通常のテキストキーボード。タイトルや人名に適しています |
textAutoCorrect | よく綴りのない単語を修正する通常のテキストキーボード |
必要に応じて複数のinputType
属性を設定することができます( '|'で区切ります)。
例:
<EditText
android:id="@+id/postal_address"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/postal_address_hint"
android:inputType="textPostalAddress|
textCapWords|
textNoSuggestions" />
使用可能なすべての入力タイプのリストがここに表示されます 。
`inputype`属性
inputype
内の属性EditText
ウィジェット:(アンドロイド4.4.3および2.3.3でテスト)
<EditText android:id="@+id/et_test" android:inputType="?????"/>
textLongMessage =キーボード:アルファベット/デフォルト。 Enterボタン:送信/次へ感情:はい。ケース:小文字。提案:はい。追加します。文字:、と。すべて
textFilter =キーボード:アルファベット/デフォルト。 Enterボタン:送信/次へ感情:はい。ケース:小文字。 提案:いいえ 。追加します。文字:、と。すべて
textCapWords =キーボード:アルファベット/デフォルト。 Enterボタン:送信/次へ感情:はい。 ケース:キャメルケース 。提案:はい。追加します。文字:、と。すべて
textCapSentences =キーボード:アルファベット/デフォルト。 Enterボタン:送信/次へ感情:はい。 ケース:文例 。提案:はい。追加します。文字:、と。すべて
時間=キーボード:数値。 Enterボタン:送信/次へ感情:いいえ。ケース: - 。 提案:いいえ 。追加します。 chars::
textMultiLine =キーボード:アルファベット/デフォルト。 Enterボタン:次の行 。感情:はい。ケース:小文字。提案:はい。追加します。文字:、と。すべて
number = キーボード:数値 。 Enterボタン:送信/次へ感情:いいえ。ケース: - 。提案:いいえ。 追加します。文字:何も
textEmailAddress =キーボード:アルファベット/デフォルト。 Enterボタン:送信/次へ感情:いいえ 。ケース:小文字。 提案:いいえ 。追加します。 chars: @と。すべて
(タイプなし)=キーボード:アルファベット/デフォルト。 Enterボタン:次の行 。感情:はい。ケース:小文字。提案:はい。追加します。文字:、と。すべて
textPassword =キーボード:アルファベット/デフォルト。 Enterボタン:送信/次へ感情:いいえ。ケース:小文字。 提案:いいえ 。追加します。文字:、と。すべて
text =キーボード:キーボード:アルファベット/デフォルト。 Enterボタン:送信/次へ感情:はい。ケース:小文字。提案:はい。追加します。文字:、と。すべて
textShortMessage =キーボード:アルファベット/デフォルト。 Enterボタン:感情 。感情:はい。ケース:小文字。提案:はい。追加します。文字:、と。すべて
textUri =キーボード:アルファベット/デフォルト。 Enterボタン:送信/次へ感情:いいえ。ケース:小文字。 提案:いいえ 。追加します。 chars: /と。すべて
textCapCharacters =キーボード:アルファベット/デフォルト。 Enterボタン:送信/次へ感情:はい。 大文字小文字:大文字提案:はい。追加します。文字:、と。すべて
phone = キーボード:数値 。 Enterボタン:送信/次へ感情:いいえ。ケース: - 。 提案:いいえ 。追加します。文字:***#。 - /(+)WPN、+ **
textPersonName =キーボード:アルファベット/デフォルト。 Enterボタン:送信/次へ感情:はい。ケース:小文字。提案:はい。追加します。文字:、と。すべて
注: Auto-capitalization
設定は、デフォルトの動作を変更します。
注2: Numeric keyboard
、すべての数字は英語1234567890です。
注3: Correction/Suggestion
設定は、デフォルト動作を変更します。
SoftKeyboardを隠す
Softkeyboardを非表示にすることは、通常EditTextを操作する際の基本的な要件です。ソフトキーボードはデフォルトで戻るボタンを押すだけで閉じることができるので、ほとんどの開発者はInputMethodManagerを使用してhideSoftInputFromWindowを呼び出す仮想キーボードを非表示にして、集中ビューを含むウィンドウのトークンを渡します。以下を行うコード:
public void hideSoftKeyboard()
{
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
コードは直接的ですが、発生する別の大きな問題は、イベントが発生したときにhide関数を呼び出す必要があることです。 EditText以外の場所を押すとSoftkeyboardが非表示になる必要がある場合はどうすればいいですか?次のコードは、あなたのonCreate()メソッドで一度だけ呼び出される必要があるきれいな関数を示しています。
public void setupUI(View view)
{
String s = "inside";
//Set up touch listener for non-text box views to hide keyboard.
if (!(view instanceof EditText)) {
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard();
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
}
カスタム編集テキストとそのアクション内のアイコンまたはボタンをクリックし、リスナーをクリックします。
この例は、右側にアイコンで編集テキストを表示するのに役立ちます。
注:これではsetCompoundDrawablesWithIntrinsicBoundsを使用しています。アイコンの位置を変更したい場合は、setIconでsetCompoundDrawablesWithIntrinsicBoundsを使用してアイコンの位置を変更できます。
public class MKEditText extends AppCompatEditText {
public interface IconClickListener {
public void onClick();
}
private IconClickListener mIconClickListener;
private static final String TAG = MKEditText.class.getSimpleName();
private final int EXTRA_TOUCH_AREA = 50;
private Drawable mDrawable;
private boolean touchDown;
public MKEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MKEditText(Context context) {
super(context);
}
public MKEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void showRightIcon() {
mDrawable = ContextCompat.getDrawable(getContext(), R.drawable.ic_android_black_24dp);
setIcon();
}
public void setIconClickListener(IconClickListener iconClickListener) {
mIconClickListener = iconClickListener;
}
private void setIcon() {
Drawable[] drawables = getCompoundDrawables();
setCompoundDrawablesWithIntrinsicBounds(drawables[0], drawables[1], mDrawable, drawables[3]);
setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
setSelection(getText().length());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
final int right = getRight();
final int drawableSize = getCompoundPaddingRight();
final int x = (int) event.getX();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA) {
touchDown = true;
return true;
}
break;
case MotionEvent.ACTION_UP:
if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA && touchDown) {
touchDown = false;
if (mIconClickListener != null) {
mIconClickListener.onClick();
}
return true;
}
touchDown = false;
break;
}
return super.onTouchEvent(event);
}
}
タッチ領域を変更したい場合は、EXTRA_TOUCH_AREAのデフォルト値を50に変更することができます。
ボタンとクリックリスナを有効にするために、あなたのアクティビティやフラグメントからこのように呼び出すことができます。
MKEditText mkEditText = (MKEditText) findViewById(R.id.password);
mkEditText.showRightIcon();
mkEditText.setIconClickListener(new MKEditText.IconClickListener() {
@Override
public void onClick() {
// You can do action here for the icon.
}
});