J'essaie d'utiliser TextInputEditText de Material Design ( https://github.com/material-components/material-components-Android/blob/master/docs/components/TextInputLayout.md ) et j'obtiens exception d'exécution.
Cela fait partie du journal d'exécution:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.grigori.materialtextedit, PID: 12036
Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.grigori.materialtextedit/com.example.grigori.materialtextedit.MainActivity}: Android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class com.google.Android.material.textfield.TextInputLayout
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2913)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:3048)
at Android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.Java:78)
at Android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.Java:108)
at Android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.Java:68)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1808)
at Android.os.Handler.dispatchMessage(Handler.Java:106)
at Android.os.Looper.loop(Looper.Java:193)
at Android.app.ActivityThread.main(ActivityThread.Java:6669)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.Java:493)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:858)
Caused by: Android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class com.google.Android.material.textfield.TextInputLayout
Caused by: Android.view.InflateException: Binary XML file line #9: Error inflating class com.google.Android.material.textfield.TextInputLayout
Caused by: Java.lang.ClassNotFoundException: Didn't find class "com.google.Android.material.textfield.TextInputLayout" on path: DexPathList
J'ai coupé ce journal par DexPathList qui contient de nombreux chemins d'accès aux fichiers apk, tels que:
Zip file "/data/app/com.example.grigori.materialtextedit-jamgTcrgG9neBKIMcqDo7Q==/base.apk"
Mon fichier XML:
<Android.support.constraint.ConstraintLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.Android.material.textfield.TextInputLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<com.google.Android.material.textfield.TextInputEditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="@string/hint_text"/>
</com.google.Android.material.textfield.TextInputLayout>
Mes dépendances build.gradle:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.Android.support:appcompat-v7:28.0.0-rc01'
implementation 'com.Android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.Android.support.test:runner:1.0.2'
androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'}
Face à ce problème lors de la mise en œuvre AndroidX dans mon projet existant.
implementation 'com.google.Android.material:material:1.0.0-beta01'
Layout XML
<com.google.Android.material.textfield.TextInputLayout
Android:id="@+id/userNameWrapper"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/TextLabel">
Style ancien
<style name="TextLabel" parent="TextAppearance.AppCompat">
<item name="Android:textColorHint">@color/hint_color</item>
<item name="Android:textSize">@dimen/text_20sp</item>
<item name="colorControlNormal">@color/primaryGray</item>
<item name="colorControlActivated">@color/colorPrimary</item>
</style>
Nouveau style
<style name="TextLabel" parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
<item name="Android:textColorHint">@color/hint_color</item>
<item name="Android:textSize">@dimen/text_20sp</item>
<item name="colorControlNormal">@color/primaryGray</item>
<item name="colorControlActivated">@color/colorPrimary</item>
</style>
Merci pour vos réponses ... Le problème était que j'ai utilisé com.google.Android.material.textfield.TextInputLayout
. Si vous utilisez ce contrôle, vous devriez ajouter dans vos dépendances:
implementation 'com.google.Android.material:material:1.0.0-beta01'
Dans mon cas, je réécris mon XML sur Android.support.design.widget.TextInputLayout
:
<Android.support.design.widget.TextInputLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:textColorHint="@color/colorPrimary"
app:errorEnabled="true">
<Android.support.design.widget.TextInputEditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:textColor="@color/colorPrimary"
Android:textColorHint="@color/colorPrimary"
Android:hint="Username" />
</Android.support.design.widget.TextInputLayout>
De plus, j'ai ajouté dans mes dépendances:
implementation 'com.Android.support:design:27.1.1'
Cela a résolu mon problème.
Dans vos dépendances, ajoutez:
implementation 'com.Android.support:design:27.0.0'
J'espère que ça vous aide .. essayez-le ..
vous devriez changer
Fichier build.gradle dans
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.0-beta01'
testImplementation 'junit:junit:4.12'
implementation 'com.google.Android.material:material:1.0.0-beta01'
}
fichier xml dans
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity"
Android:focusable="false"
Android:clickable="true">
<LinearLayout
Android:id="@+id/linear"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_centerInParent="true"
Android:orientation="vertical">
<com.google.Android.material.textfield.TextInputLayout
style="@style/TextInputLayout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="UserName"
Android:layout_margin="15dp">
<com.google.Android.material.textfield.TextInputEditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:inputType="text"
Android:maxLines="1" />
</com.google.Android.material.textfield.TextInputLayout>
<com.google.Android.material.textfield.TextInputLayout
style="@style/TextInputLayout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="Email"
Android:layout_margin="15dp">
<com.google.Android.material.textfield.TextInputEditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:inputType="textEmailAddress"
Android:maxLines="1" />
</com.google.Android.material.textfield.TextInputLayout>
<com.google.Android.material.textfield.TextInputLayout
style="@style/TextInputLayout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="Password"
Android:layout_margin="15dp">
<com.google.Android.material.textfield.TextInputEditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:inputType="textPassword"
Android:maxLines="1" />
</com.google.Android.material.textfield.TextInputLayout>
</LinearLayout>
</RelativeLayout>
MainActivity.Java
import Android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
vous devriez ajouter
implementation 'com.github.material-components:material-components-Android:1.0.0-rc01'
au niveau de votre application build.gradle dans la section des dépendances, il se présentera ainsi:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.Android.support:appcompat-v7:28.0.0-rc01'
implementation 'com.Android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.Android.support.test:runner:1.0.2'
androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.github.material-components:material-components-Android:1.0.0-rc01'
}
Cette erreur est levée quand"app:passwordToggleEnabled="true" or app:passwordToggleTint="#fff"
est en com.google.Android.material.textfield.TextInputLayout
.
En supprimant, cela fonctionne.
Il peut être défini par programme:
TextInputLayout input_password_layout=(TextInputLayout)findViewById(R.id.input_password_layout);
input_password_layout.setPasswordVisibilityToggleEnabled(true);
input_password_layout.setPasswordVisibilityToggleDrawable(R.drawable.back);
Après avoir suivi toutes les étapes énumérées ici , je rencontrais toujours le même problème de rendu, mais j’ai décidé de lancer l’application sur l’appareil pour voir ce qui se passait,
Et même si l'aperçu dans Android Studio affichait le composant matériel sous la forme d'un EditText standard et affichait plusieurs avertissements, il était correctement restitué sur le périphérique.
Donc, pour éviter aux gens de googler cette erreur pendant un certain temps (pour moi, c'était une heure perdue), essayez-le simplement sur l'appareil!