web-dev-qa-db-ja.com

追加されたEditTextはTextInputEditTextではありません。代わりにそのクラスを使用するように切り替えてください

EditText内でTextInputLayoutを使用していますが、サポートライブラリを23.2.0にアップグレードした後、logcatでこの警告が表示されます。通常のEditTextTextInputEditTextの違いは何ですか?私はそれのためのドキュメントを見つけることができないようです。

86
Silvia H

私もこれを疑問に思っていました Daniel Wilson はドキュメントを集めましたが、訓練を受けていない人にはあまり意味がありません。以下がそのすべてです。 "extract mode" は、スペースが小さすぎる場合に表示されるビューのタイプを指します。たとえば、携帯電話の風景です。 IMEとしてGalaxy S4とGoogleキーボードを使用しています。

IMEが表示されていないランドスケープUI

説明に基づいたフォーカスに基づいて、TextInputLayoutがヒントをエディターの外に押し出している様子を見ることができます。ここでは特別なことは何もありません。これがTextInputLayoutが行うことです。

Landscape UI without visible IME

空の名前フィールドを編集するランドスケープUI

名前を編集すると、IMEが編集内容のヒントを提供していないことがわかります。

Landscape UI editing empty Name field

空の説明フィールドを編集するランドスケープUI

説明を編集すると、IMEが編集内容のヒントを提供していることがわかります。

Landscape UI editing empty Description field

レイアウトXML

2つのフィールドの違いは、タイプEditText VS TextInputEditTextです。ここで重要なことは、TextInputLayoutにはラップされたEditTextではなくAndroid:hintがあることです。これは、TextInputEditTextの数行のJavaコードが大きな違いをもたらす場合です。

名前フィールド

<Android.support.design.widget.TextInputLayout
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:hint="Item Name"
    >
    <EditText
        Android:id="@+id/name"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        />
</Android.support.design.widget.TextInputLayout>

説明フィールド

<Android.support.design.widget.TextInputLayout
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:hint="Item Description"
    >
    <Android.support.design.widget.TextInputEditText
        Android:id="@+id/description"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:inputType="textMultiLine"
        Android:minLines="4"
        Android:scrollbars="vertical"
        />
</Android.support.design.widget.TextInputLayout>
104
TWiStErRob

ドキュメントはありませんが、クラスは通常のEditTextに1つの追加機能があります:

このクラスを使用すると、「抽出」モードのときにIMEにヒントを表示できます。

具体的には EditorInfo.hintText を設定します。 TextInputLayout クラスでは、子EditTextウィジェットの一部としてではなく、ヒントと外観を指定できます。

これを行う必要がある場合は、TextInputEditTextを使用して、TextInputLayoutで指定したヒント情報に注意を払う必要があります。

30
Daniel Wilson

これらは本質的に同じものですが、TextInputEditTextにはより多くの機能があり、属性もあると思います。 TextInputEditTextに変更すると、すべてが機能し、標準のEditTextで以前と同じように見えました。

4
Nick Mowen