web-dev-qa-db-fra.com

TextInputLayout: RuntimeException - Échec de la résolution de l'attribut à l'index 24

Je continue de recevoir cette erreur lorsque j'essaie de setErrorEnabled sur mon textInputLayout:

03-12 12:29:03.206 5706-5706/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                 Process: com.myapp, PID: 5706
                                                 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:696)
                                                     at Android.widget.TextView.<init>(TextView.Java:632)
                                                     at Android.widget.TextView.<init>(TextView.Java:628)
                                                     at Android.widget.TextView.<init>(TextView.Java:624)
                                                     at Android.support.design.widget.TextInputLayout.setErrorEnabled(TextInputLayout.Java:380)
                                                     at com.bekwaai.popupwindow.RGNamePopUp$1.onClick(RGNamePopUp.Java:48)
                                                     at Android.view.View.performClick(View.Java:4780)
                                                     at Android.view.View$PerformClick.run(View.Java:19866)
                                                     at Android.os.Handler.handleCallback(Handler.Java:739)
                                                     at Android.os.Handler.dispatchMessage(Handler.Java:95)
                                                     at Android.os.Looper.loop(Looper.Java:135)
                                                     at Android.app.ActivityThread.main(ActivityThread.Java:5254)
                                                     at Java.lang.reflect.Method.invoke(Native Method)
                                                     at Java.lang.reflect.Method.invoke(Method.Java:372)
                                                     at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:903)
                                                     at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:698)

C'est le scénario - j'ai un textInputLayout à l'intérieur d'un popupwindow. Ceci est le code à l'intérieur de la popup.

public class NamePopUp extends PopupWindow {

    Android.support.v7.widget.AppCompatEditText name;
    TextInputLayout nameInput;


    public NamePopUp(final Context context) {
        super(context);
        View popupView = LayoutInflater.from(context).inflate(R.layout.popup_rg_confirm, null);
        nameInput = (TextInputLayout) popupView.findViewById(R.id.name_input_layout);
    }
}

Voici mon xml pour la disposition popupwindow:

<Android.support.design.widget.TextInputLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_marginTop="12dp"
    Android:theme="@style/TextLabel"
    app:backgroundTint="@color/white"
    app:rippleColor="@color/white"
    Android:id="@+id/name_input_layout"
    Android:layout_marginBottom="8dp"
    Android:paddingRight="24dp"
    Android:paddingLeft="24dp">

<Android.support.v7.widget.AppCompatEditText
    Android:id="@+id/enter_name"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:textColor="@color/white"
    Android:textCursorDrawable="@drawable/color_cursor"
    Android:hint="@string/groupname"/>

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

Voici le style que j'utilise:

<style name="TextLabel" parent="TextAppearance.AppCompat">
    <!-- Hint color and label color in FALSE state -->
    <item name="Android:textSize">20sp</item>
    <item name="Android:textColorHint">@color/white</item>
    <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
    <item name="colorAccent">@color/white</item>
    <item name="colorControlNormal">@color/white</item>
    <item name="colorControlActivated">@color/white</item>
</style>

La fenêtre contextuelle est appelée dans un Android.support.v4.app.Fragment et le fragment est à l'intérieur d'un AppCompatActivity.

L'erreur se produit ici lorsque l'utilisateur clique sur le bouton ok mais que le nom edittext est vide. En d'autres termes, l'utilisateur n'a rien entré dans l'edittext et a cliqué sur ok:

    button_ok.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (StringUtils.isNotEmpty(name.getText().toString())) {
                nameInput.setErrorEnabled(false);
                groupNameEvent.doEvent(name.getText().toString());

            } else {
                nameInput.setErrorEnabled(true); //ERROR OCCURS HERE!
                nameInput.setError(context.getString(R.string.no_name));
            }
        }
    });

Comment faire disparaître cette erreur?

23
Simon

Changez simplement le thème de base de TextLabel en Widget.Design.TextInputLayout

<style name="TextLabel" parent="Widget.Design.TextInputLayout">
61
Martin Y.

Pour moi, les œuvres suivantes ( https://stackoverflow.com/a/42779409/291414 ):

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="textColorError">@color/design_textinput_error_color_light</item>
</style>
3
CoolMind