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?
Changez simplement le thème de base de TextLabel en Widget.Design.TextInputLayout
<style name="TextLabel" parent="Widget.Design.TextInputLayout">
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>