J'ai eu un crash en essayant d'utiliser la nouvelle TextInputField
pour Android et je voulais partager ma solution.
Essayer le nouveau TextInputField dans la bibliothèque Android appcompat plantait mon application. Voici ma mise en page XML.
<Android.support.design.widget.TextInputLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<EditText
Android:id="@+id/email"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="e-mail"
Android:inputType="textEmailAddress"
Android:singleLine="true"/>
</Android.support.design.widget.TextInputLayout>
L'erreur que j'ai eu:
Android.view.InflateException: Binary XML file line #20: Error inflating class Android.support.design.widget.TextInputLayout.
SOLUTION: Ajoutez l'attribut hintTextAppearance
à votre TextInputLayout
, afin que la balise lead ressemble à ceci:
<Android.support.design.widget.TextInputLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:hintTextAppearance="@Android:style/TextAppearance.Medium">
Assurez-vous d'avoir les dépendances suivantes dans votre fichier gradle:
compile 'com.Android.support:appcompat-v7:22.2.0'
compile 'com.Android.support:design:22.2.0'
Exemple de travail:
<Android.support.design.widget.TextInputLayout
Android:id="@+id/txtEmail_InpLyt"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<EditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:inputType="textEmailAddress"
Android:ems="10"
Android:id="@+id/txtEmail"
Android:hint="Email Address"
Android:singleLine="true"
Android:layout_alignParentTop="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentEnd="true"/>
</Android.support.design.widget.TextInputLayout>
(Il n'est pas nécessaire de définir hintTextAppearance
.)
Mettre à jour:
Si vous rencontrez des problèmes avec le texte de conseil n'apparaissant pas dans les versions plus récentes d'Android (Marshmallow/Nougat), mettez à jour la bibliothèque vers la version 22.2.1 (voir TextInputLayout n'indiquant pas de conseil EditText avant que l'utilisateur ne se concentre dessus ).
compile 'com.Android.support:appcompat-v7:22.2.1'
compile 'com.Android.support:design:22.2.1'
Cela m'est aussi arrivé et j'ai proposé une solution qui ne nécessite pas de changer le thème de l'application, mais simplement de changer le thème de TextInputLayout
<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>
Vous devrez ajouter la bibliothèque appCompat si vous n'avez pas déjà:
compile 'com.Android.support:appcompat-v7:23.0.1'
J'ai eu le même problème en gonflant du XML contenant TextInputLayout
. Le problème a été corrigé en définissant le style correct sur mon application. Juste comme il est dit ici: Bibliothèque de support de conception Android
J'ai le numéro suivant
Caused by: Android.view.InflateException: Binary XML file line #38: Error inflating class Android.support.design.widget.TextInputLayout
Mon style.xml était
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Android:Theme.Material">
<!-- Customize your theme here. -->
</style>
</resources>
Comme il est dit dans ce post sur Design Support Library
Notez que, puisque la bibliothèque de conception dépend des bibliothèques de support Support v4 et AppCompat, celles-ci seront automatiquement incluses lorsque vous ajoutez la dépendance de la bibliothèque de conception.
Donc, PAS BESOIN D'AJOUTER la ligne suivante dans le fichier Gradle
compile 'com.Android.support:appcompat-v7:22.2.0'
J'ai trouvé un lien expliquant que la bibliothèque de support technique de conception fait partie de AppCompat et nécessite la base de thème AppCompat pour fonctionner. Alors J'ai modifié mon style.xml pour être
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
</resources>
Et ça a fonctionné.
Utilisez le suivant:
View view = LayoutInflator.from(getActivity()).inflate(R.layout.your_layout_file,parent,false);
Assurez-vous que LayoutInflater est créé à partir d'un AppCompatActivity
ex.
au lieu de
inflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
utilisation:
inflater = LayoutInflater.from(<appCompatActivity>);
J'ai eu le même problème avec Android Studio 3.0.1
Tout ce dont vous avez besoin pour ajouter la ligne suivante dans gradle.properties (Propriétés du projet) :
Android.enableAapt2 = false
Aucune des solutions n'a fonctionné pour moi. j'utilise
compile 'com.Android.support:appcompat-v7:28.0.0'
compile 'com.Android.support:design:28.0.0'
J'ai essayé toute la solution. Mon application fonctionne parfaitement dans les appareils avec SDK inférieur. Mais les accidents dans les nouveaux périphériques (supérieur à SDK 26). Mais après avoir gratté la tête pendant 2 jours, nous avons enfin trouvé la solution.
mon éditeur de mise en page a montré l'erreur de
The following classes could not be instantiated:
- Android.support.design.widget.TextInputLayout
Mais cela ne m'a pas donné assez d'informations pour travailler. Ce n'est que lorsque j'ai examiné d'autres erreurs de l'éditeur de mise en page. Sous le problème de rendu j'ai trouvé que
Couldn't resolve resource @string/path_password_strike_through
J'ai finalement eu la solution après avoir étudié ce problème de rendu. Tout ce que vous avez à faire est d’ajouter
app:passwordToggleDrawable="@string/string_name"
dans votre fichier XML TextInputLayout.
<Android.support.design.widget.TextInputLayout
Android:id="@+id/login_input_layout_password"
Android:layout_width="match_parent"
app:passwordToggleDrawable="@drawable/ic_lock_outline_grey600_24dp"
Android:layout_height="wrap_content"
Android:layout_marginLeft="30dp"
Android:layout_marginRight="30dp"
Android:layout_marginTop="10dp"
Android:backgroundTint="@color/colorAccent"
app:boxStrokeColor="#555"
Android:textColorHint="@color/colorPrimary">
<EditText
Android:id="@+id/login_input_password"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
/>
</Android.support.design.widget.TextInputLayout>
pour moi, le travail change de EditText à TextInputEditText
<Android.support.design.widget.TextInputLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Android.support.design.widget.TextInputEditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="@string/date_raffle"/>
</Android.support.design.widget.TextInputLayout>
vous l'avez peut-être ajouté compile 'com.Android.support:appcompat-v7:22.2.0'
mais vous devez ajouter compile 'com.Android.support:design:22.2.0'
vous pouvez essayer ces dépendances:
compile 'com.Android.support:appcompat-v7:22.2.0'
compile 'com.Android.support:design:22.2.0'
dans votre fichier de classement.