web-dev-qa-db-ja.com

エラーを示すTextInputLayoutのsetError

TextInputLayoutが正常に機能し、Errorを設定しようとすると、エラーが表示されます。

コード:

 if (etFirstName.getText().length() == 0) {
            etFirstName.requestFocus();
            tvFirstName.setError("Please enter firstname");
        } else {
            tvFirstName.setError(null);
            tvFirstName.setErrorEnabled(false);
        }

ログを確認:

Java.lang.RuntimeException: Failed to resolve attribute at index 24
            at Android.content.res.TypedArray.getColor(TypedArray.Java:401)
            at Android.widget.TextView.<init>(TextView.Java:692)
            at Android.widget.TextView.<init>(TextView.Java:629)
            at Android.widget.TextView.<init>(TextView.Java:625)
            at Android.widget.TextView.<init>(TextView.Java:621)
            at Android.support.design.widget.TextInputLayout.setErrorEnabled(TextInputLayout.Java:297)
            at Android.support.design.widget.TextInputLayout.setError(TextInputLayout.Java:344)
8
user4302606

TextInputLayout(Android:theme = "@ style/Theme.AppCompat")に有効なスタイルを指定します

<Android.support.design.widget.TextInputLayout
  Android:id="@+id/testingInputLayout"
  Android:layout_width="match_parent"
  Android:layout_height="wrap_content"
  Android:theme="@style/Theme.AppCompat">

<EditText
   Android:id="@+id/testingEditText"
   Android:layout_width="fill_parent"
   Android:layout_height="wrap_content"
   Android:hint="@string/testText"
   Android:inputType="textEmailAddress" />

</Android.support.design.widget.TextInputLayout>

AppCompatとサポート設計の依存関係を追加する必要があります(そうでない場合)

compile 'com.Android.support:appcompat-v7:23.1.1'
compile 'com.Android.support:design:23.1.1'

マニフェストファイルにAppCompatテーマを追加します。

<application
 ...
Android:theme="@style/Theme.AppCompat">
7
Ranjith Kumar

問題が発生する理由を完全には理解していませんが、Androidがその状態に応じてビューに色を適用する方法について何かを行う必要があります。

これが私が問題を解決した方法です:

1)エラー(またはヒント)のスタイリングにのみ使用されるカスタムスタイルを定義します。

あなたのres/values/styles.xml新しいスタイルノードを追加:

    <style name="error" parent="@Android:style/TextAppearance">
        <item name="Android:textColor">@color/colorAccent</item> <!--apply the color you wat here -->
        <item name="Android:textSize">12dp</item>
    </style>

2)TextInputLayoutにスタイルを適用します。

また、errorEnabled属性を必ず指定してください。

<Android.support.design.widget.TextInputLayout
        Android:id="@+id/input_email_layout"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="8dp"
        app:errorEnabled="true"
        app:errorTextAppearance="@style/error"
    >
        <Android.support.design.widget.TextInputEditText
            Android:id="@+id/input_email"
                  Android:layout_width="match_parent"
                  Android:layout_height="wrap_content"
                  Android:inputType="textEmailAddress"
                  Android:hint="@string/hint_email"/>
    </Android.support.design.widget.TextInputLayout>
10

これを使用して、Theme.AppCompatを必要としない

<com.google.Android.material.textfield.TextInputLayout
                Android:id="@+id/tv_metadata_layout"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content">
                <com.google.Android.material.textfield.TextInputEditText
                    Android:id="@+id/tv_metadata_Details"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content"/>
</com.google.Android.material.textfield.TextInputLayout>
0
Balaji Bal

Textinputlayoutのスタイルテーマ:

<style name="HintInputTextAppearance" parent="TextAppearance.AppCompat">
<item name="Android:textColor">@color/input_floating_color</item>
<item name="Android:textSize">22dp</item>
<item name="colorAccent">@color/input_floating_color</item>
</style>
<style name="InputTextAppearance" parent="TextAppearance.AppCompat">
<item name="Android:textColor">#ff000000</item>
<item name="Android:textColorHint">#ff000000</item>
<item name="Android:textSize">24dp</item>
<item name="colorAccent">#ff000000</item>
</style>

<style name="ErrorTextAppearance" parent="TextAppearance.AppCompat">
<item name="Android:textColor">#ffff0000</item>
<item name="Android:textColorHint">#ffff0000</item>
<item name="Android:textSize">18sp</item>
<item name="colorAccent">#ffff0000</item>
</style>

レイアウトでの使用:

<Android.support.design.widget.TextInputLayout
Android:layout_width="match_parent"
Android:id="@+id/name_signup"
app:errorEnabled="true"
app:errorTextAppearance="@style/ErrorTextAppearance"
app:hintTextAppearance="@style/HintInputTextAppearance"
Android:layout_marginLeft="@dimen/left_margin_login"
Android:layout_marginRight="@dimen/right_margin_login"
Android:layout_height="match_parent">
    <Android.support.design.widget.TextInputEditText
        Android:layout_width="match_parent"
        Android:textAppearance="@style/InputTextAppearance"
        Android:layout_height="wrap_content"
        Android:hint="Name" />
</Android.support.design.widget.TextInputLayout>

<Android.support.design.widget.TextInputLayout
Android:layout_width="match_parent"
Android:id="@+id/email_signup"
app:errorEnabled="true"
app:errorTextAppearance="@style/ErrorTextAppearance"
app:hintTextAppearance="@style/HintInputTextAppearance"
Android:layout_marginLeft="@dimen/left_margin_login"
Android:layout_marginRight="@dimen/right_margin_login"
Android:layout_height="match_parent">
    <Android.support.design.widget.TextInputEditText
        Android:layout_width="match_parent"
        Android:textAppearance="@style/InputTextAppearance"
        Android:layout_height="wrap_content"
        Android:hint="Email" />
</Android.support.design.widget.TextInputLayout>
0
Kapil Choudhary

@Sevastyanによるソリューションは、XMLレイアウトの使用に最適です。

ただし、プログラムで作成したTextInputLayoutとTextInputEditTextがあり、これを行った場合:

tilCode.setErrorEnabled(true);
tilCode.setErrorTextAppearance(R.style.error);

エラーになります。しかし、ただ:

tilCode.setErrorTextAppearance(R.style.error);

私のために働く。

0
twelvester