2017-06-14 4 views
1

Je suis en train d'implémenter les Color State List Resources dans mon application android, en suivant le guide du développeur Android Color State List Resource | Android Developers. J'ai donc créé deux fichiers de ressources button_text.xml et button_background.xml dans le répertoire res/color/ et les ai référencés dans le @color/button_text et @color/button_background respectivement dans le activity_main.xml. Voici le code de mise en page :

<Button 
    android:id="@+id/myButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/app_name" 
    android:layout_marginTop="150dp" 
    android:layout_gravity="center" 
    android:textColor="@color/button_text" 
    android:background="@color/button_background"/> 

sur l'exécution de l'application, je reçois un Resources Not Found Exception dans les journaux comme indiqué ci-dessous:

Process: com.example.myanimation, PID: 29254 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myanimation/com.example.myanimation.MainActivity}: android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class Button 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2724) 
at android.app.ActivityThread.-wrap12(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1473) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6123) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757) 
Caused by: android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class Button 
Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class Button 
Caused by: android.content.res.Resources$NotFoundException: Drawable com.example.myanimation:color/button_background with resource ID #0x7f0b0053 
Caused by: android.content.res.Resources$NotFoundException: File res/color/button_background.xml from drawable resource ID #0x7f0b0053 
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:729) 
at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:575) 
at android.content.res.Resources.loadDrawable(Resources.java:854) 
at android.content.res.TypedArray.getDrawable(TypedArray.java:928) 
at android.view.View.<init>(View.java:4177) 
at android.widget.TextView.<init>(TextView.java:710) 
at android.widget.Button.<init>(Button.java:109) 
at android.widget.Button.<init>(Button.java:105) 
at android.support.v7.widget.AppCompatButton.<init>(AppCompatButton.java:65) 
at android.support.v7.widget.AppCompatButton.<init>(AppCompatButton.java:61) 
at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:109) 
at android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1026) 
at android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1083) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:858) 
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:518) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:377) 
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:289) 
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 
at com.example.myanimation.MainActivity.onCreate(MainActivity.java:11) 
at android.app.Activity.performCreate(Activity.java:6672) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1140) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2612) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2724) 
at android.app.ActivityThread.-wrap12(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1473) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6123) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757) 

J'ai essayé de nettoyer et reconstruire le projet, mais ça n'a pas marché. En outre, en mettant le xml files en au lieu de res/color/ montre la même erreur.Veuillez aider à résoudre le problème. Merci d'avance!

EDIT:

Voici le code du fichier button_text.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:color="#000" 
      android:state_pressed="true"/> 
    <item android:color="#fff" 
      android:state_activated="true"/> 
</selector> 

Et, button_background.xml code du fichier:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:color="#fff" 
      android:state_pressed="true"/> 
    <item android:color="#000" 
      android:state_activated="true"/> 
</selector> 
+1

Paster votre Android: textColor = "@ color/button_text" android: background = "@ color/button_background" fichiers –

+0

avez-vous définir la couleur comme ' # 272c33 'dans votre fichier' xml' – Akshay

+0

@Akhay J'ai ajouté le code 'color/button_text.xml' et' color/button_background.xml' dans la question @NileshRathod – Robin

Répondre

2

Alors, voilà. S'il vous plaît lire la réponse complète. L'attribut android:background ne prend pas en charge le Color State List contrairement à android:textColor. Pour que la propriété android:background fonctionne, vous avez besoin de State List Drawables. Ainsi, au lieu de res/color/ créer le fichier dans le répertoire res/drawable/. Voici le code:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@color/white" 
      android:state_pressed="true"/> 
    <item android:drawable="@color/black" 
      android:state_activated="true"/> 
</selector> 

Notez l'utilisation d'android: drawable au lieu de android: couleur. Android utilisera la ressource de couleur et en fera un dessinable.Pour finir, vous devez ajouter les ressources de couleur à votre fichier res/values ​​/ colors.xml.

Pour plus d'informations: CLICK HERE!

0

Tout d'abord vous avez à changer votre button_text.xml et button_background.xml à drawable annuaire.

puis Posé comme:

android:textColor="@drawable/button_text" 
android:background="@drawable/button_background" 
+0

Cela n'a pas fonctionné, mais merci! De plus, j'ai fourni un lien dans ma Question au Guide officiel du développeur Android qui dit que nous devrions créer le fichier 'selector's xml' dans le répertoire' res/color/'. – Robin

0

essayer cela, il vous aidera à suivre cette

Étape 1: -> créer une button_text.xml dans res/couleur/répertoire.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_enabled="true" android:state_pressed="false" android:color="@color/colorPrimary"/> 
<item android:state_enabled="false" android:color="@color/colorAccent"/> 
<item android:state_enabled="true" android:state_pressed="true" android:color="@color/colorPrimaryDark"/> 
</selector> 

Étape 2: -> créer un button_selector.xml dans res/drawble/répertoire.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_enabled="true" android:state_pressed="false" android:drawable="@drawable/disha"/> 
<item android:state_enabled="false" android:drawable="@drawable/back"/> 
<item android:state_enabled="true" android:state_pressed="true" android:drawable="@drawable/ic_edit_pen"/> 
</selector> 

Etape 3: - maintenant Appy dans votre bouton

<Button 
    android:id="@+id/b1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textColor="@color/button_text" 
    android:background="@drawable/button_selector" /> 

AKS moi dans le cas d'une requête

+0

Merci pour votre réponse. Le fichier 'button_text.xml' fonctionne bien mais' button_background.xml' ne l'était pas. Vérifiez ma réponse – Robin

+0

dans button_background vous devez créer vos formes personnalisables pour les boutons –