サーチ…


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.
               
            }
        });


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow