web-dev-qa-db-fra.com

Impossible de convertir en couleur: erreur type = 0x2 lors du gonflement d'une mise en page fragmentée, mais uniquement sur Samsung Galaxy et Note 4

Je travaille sur une application simple avec une activité et j'utilise des fragments.Un écran avec quelques éléments. Lorsque je compile et exécute l'application, cela fonctionne bien, sauf sur Samsung Galaxy s3 et la note 4. Je ne comprends pas ce qui ne va pas dans la pile.

01-16 16:25:05.915: E/AndroidRuntime(23174): Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test/com.test.MainActivity}: Android.view.InflateException: Binary XML file line #37: Error inflating class com.Android.internal.widget.ActionBarView
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2292)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2350)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.app.ActivityThread.access$800(ActivityThread.Java:163)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1257)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.os.Handler.dispatchMessage(Handler.Java:102)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.os.Looper.loop(Looper.Java:157)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.app.ActivityThread.main(ActivityThread.Java:5335)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Java.lang.reflect.Method.invokeNative(Native Method)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Java.lang.reflect.Method.invoke(Method.Java:515)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1265)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1081)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at dalvik.system.NativeStart.main(Native Method)
01-16 16:25:05.915: E/AndroidRuntime(23174): Caused by: Android.view.InflateException: Binary XML file line #37: Error inflating class com.Android.internal.widget.ActionBarView
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.createView(LayoutInflater.Java:626)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:702)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:761)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:769)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:498)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:398)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:354)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at com.Android.internal.policy.impl.PhoneWindow.generateLayout(PhoneWindow.Java:3253)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at com.Android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.Java:3327)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:336)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.app.Activity.setContentView(Activity.Java:1973)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at com.test.MainActivity.onCreate(MainActivity.Java:28)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.app.Activity.performCreate(Activity.Java:5389)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1105)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2256)
01-16 16:25:05.915: E/AndroidRuntime(23174):    ... 11 more
01-16 16:25:05.915: E/AndroidRuntime(23174): Caused by: Java.lang.reflect.InvocationTargetException
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Java.lang.reflect.Constructor.constructNative(Native Method)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.createView(LayoutInflater.Java:600)
01-16 16:25:05.915: E/AndroidRuntime(23174):    ... 25 more
01-16 16:25:05.915: E/AndroidRuntime(23174): Caused by: Android.view.InflateException: Binary XML file line #35: Error inflating class Android.widget.TextView
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.createView(LayoutInflater.Java:626)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at com.Android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.Java:56)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.onCreateView(LayoutInflater.Java:675)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:700)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:761)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:769)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:498)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:398)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at com.Android.internal.widget.ActionBarView.initTitle(ActionBarView.Java:1131)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at com.Android.internal.widget.ActionBarView.setDisplayOptions(ActionBarView.Java:947)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at com.Android.internal.widget.ActionBarView.<init>(ActionBarView.Java:392)
01-16 16:25:05.915: E/AndroidRuntime(23174):    ... 28 more
01-16 16:25:05.915: E/AndroidRuntime(23174): Caused by: Java.lang.reflect.InvocationTargetException
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Java.lang.reflect.Constructor.constructNative(Native Method)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.view.LayoutInflater.createView(LayoutInflater.Java:600)
01-16 16:25:05.915: E/AndroidRuntime(23174):    ... 38 more
01-16 16:25:05.915: E/AndroidRuntime(23174): Caused by: Java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.content.res.TypedArray.getColor(TypedArray.Java:327)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.widget.TextView.<init>(TextView.Java:945)
01-16 16:25:05.915: E/AndroidRuntime(23174):    at Android.widget.TextView.<init>(TextView.Java:863)
01-16 16:25:05.915: E/AndroidRuntime(23174):    ... 41 more

Et la mise en page du fragment:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/layout"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:orientation="vertical"
    tools:context="com.locker.theme.one.MainActivity$PlaceholderFragment" >

    <RelativeLayout
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_weight=".14"
        Android:clickable="true"
        Android:gravity="center" >

        <DigitalClock
            Android:id="@+id/digitalClock"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:gravity="center"
            Android:textAppearance="?android:attr/textAppearanceLarge"
            Android:textColor="@Android:color/white"
            Android:textSize="66sp" />
    </RelativeLayout>

    <RelativeLayout
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_weight=".14"
        Android:gravity="center" >

        <ProgressBar
            Android:id="@+id/progress"
            style="?android:attr/progressBarStyleInverse"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_centerInParent="true"
            Android:layout_gravity="center"
            Android:layout_marginBottom="8dp"
            Android:visibility="gone" />

        <Button
            Android:id="@+id/activateBtn"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:background="@color/material_deep_teal_200"
            Android:gravity="center"
            Android:layout_marginLeft="@dimen/activity_horizontal_margin"
            Android:layout_marginRight="@dimen/activity_horizontal_margin"
            Android:text="Test" />
    </RelativeLayout>

</LinearLayout>

C'est le style que j'utilise:

<resources>

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.


    -->
    <style name="AppBaseTheme" parent="Android:Theme.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.


        -->
    </style>

    <!-- Application theme. -->

    <style name="AppTheme" parent="Android:Theme.Material">
        <!-- Main theme colors -->
    </style>

</resources>

J'ai un peu cherché sur Google, mais je n'ai trouvé aucune idée qui puisse me dire ce qui se passe. Tous les points seraient géniaux. Je vous remercie

29
user1140656

J'ai rencontré le même problème, causé par l'utilisation de attributes comme référence à color dans xml drawable. Comme mentionné ci-dessus ici sur API <21, vous ne pouvez pas utiliser attrs à color dans xml drawable. Le seul moyen consiste donc à utiliser une référence à une ressource de couleur (@color/YOURS_COLOR) ou à utiliser le format #RGB.

Donc, si vous voulez utiliser xml drawable avec des couleurs dépendantes du thème, vous devez créer un dessin pour chaque thème;

62
mohax

J'ai eu le même problème sur les appareils API 10 et cela était dû à l'utilisation de theme pour API 11+ (depuis appcompat) . Pour une solution rapide, vous pouvez trouver la déclaration suivante sur les thèmes dans styles.xml

<style name="AppBaseTheme" parent="...">
...
<style name="AppTheme" parent="...">

Et changer sur:

<style name="AppBaseTheme" parent="Android:Theme.Light">
...
<style name="AppTheme" parent="Android:Theme.Light">
1
qmaq

Je me suis heurté à cela lors de l'utilisation d'une librairie tierce https://github.com/hoang8f/Android-flat-button après avoir mis Gradel à niveau vers 3.0.1. 

Pas idéal, mais le déclassement semblait résoudre l'erreur 

Cette modification nécessite la mise à jour de 2 fichiers: 

  1. Projet build.gradle avec

    com.Android.tools.build:gradle:2.3.3

  2. gradle/wrapper/gradle-wrapper.properties avec

    distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.Zip

0
Gene Bo

Changez "AppTheme" pour ne pas utiliser de matériel. Par exemple essayez:

<style name="AppTheme" parent="Android:Theme.Holo">

</style>

J'ai eu un problème très similaire sur mon Samsung Galaxy Tab Pro 8.4 fonctionnant sous Android 4.2. Cela fonctionnait lorsque j'ai changé Styles.xml pour utiliser "Android: Theme.Holo" ou "Theme.AppCompat.Light.DarkActionBar".

Je n'ai pas pu trouver d'informations sur la raison exacte pour laquelle cela se produit et pourquoi cela ne semble affecter que les produits Samsung. Si vous voulez vraiment inclure Matériau en tant que style, vous pouvez essayer d'ajouter un autre fichier de style à utiliser avec des périphériques dotés d'une API de niveau 21 ou supérieur. Plus d'informations à ce sujet sont ici sous la section "Sélectionnez un thème en fonction de la version de la plate-forme"

Tenez-nous au courant si vous trouvez d’autres correctifs.

0
Brendan L