web-dev-qa-db-fra.com

5.1 Crash - La couleur principale d'une TaskDescription doit être opaque

J'ai implémenté la conception matérielle dans mon application et elle fonctionne parfaitement sous <Android 5, mais lorsque j'essaie de fonctionner sous Android 5.0 ou version ultérieure, les éléments suivants apparaissent dans mon journal.

     FATAL EXCEPTION main
 Process com.test.test, PID 3195
 Java.lang.RuntimeException Unable to start activity ComponentInfo{com.test.test/com.test.test.MainActivity} Java.lang.RuntimeException A TaskDescription's primary color should be opaque
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java2298)
    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java2360)
    at Android.app.ActivityThread.access$800(ActivityThread.Java144)
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java1278)
    at Android.os.Handler.dispatchMessage(Handler.Java102)
    at Android.os.Looper.loop(Looper.Java135)
    at Android.app.ActivityThread.main(ActivityThread.Java5221)
    at Java.lang.reflect.Method.invoke(Native Method)
    at Java.lang.reflect.Method.invoke(Method.Java372)
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java899)
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java694)
 Caused by Java.lang.RuntimeException A TaskDescription's primary color should be opaque
    at Android.app.ActivityManager$TaskDescription.<init>(ActivityManager.Java536)
    at Android.app.Activity.onApplyThemeResource(Activity.Java3677)
    at Android.view.ContextThemeWrapper.initializeTheme(ContextThemeWrapper.Java140)
    at Android.view.ContextThemeWrapper.setTheme(ContextThemeWrapper.Java85)
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java2244)
    ... 10 more

Et voici mes styles:

    <resources>

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


    -->


    <!-- All customizations that are NOT specific to a particular API-level can go here. -->

    <style name="AppTheme" parent="@style/Theme.AppCompat.NoActionBar">

        <!-- All customizations that are NOT specific to a particular API-level can go here. -->

        <item name="colorPrimaryDark">#4DFF9800</item>
        <item name="colorPrimary">#4D607D8B</item>
    </style>

</resources>

Si quelqu'un pouvait me donner des conseils, ce serait un grand merci.

23
Jack

Vous ne pouvez pas utiliser alfa en couleur primaire. La couleur primaire doit être opaque.

Changement:

<item name="colorPrimaryDark">#4DFF9800</item>
<item name="colorPrimary">#4D607D8B</item>

À

<item name="colorPrimaryDark">#FF9800</item>
<item name="colorPrimary">#607D8B</item>

pour api 21 dans le fichier res/values-v21/style.xml

64
Konrad Krakowiak

@ Konrad Krakowiak a raison.
Vous pouvez voir le code source de Android.app.ActivityManager # TaskDescription.

/**
    * Creates the TaskDescription to the specified values.
    *
    * @param label A label and description of the current state of this task.
    * @param icon An icon that represents the current state of this task.
    * @param colorPrimary A color to override the theme's primary color. This color must be opaque.
    */
    public TaskDescription(String label, Bitmap icon, int colorPrimary) {
      if ((colorPrimary != 0) && (Color.alpha(colorPrimary) != 255)) {
        throw new RuntimeException("A TaskDescription's primary color should be opaque");
      }

      mLabel = label;
      mIcon = icon;
      mColorPrimary = colorPrimary;
    }
1
Jimson

La solution simple au problème consiste à supprimer l’opaque appliquée à la couleur primaire dans colors.xml.

Quand opaque est appliqué à une couleur primaire, le code de couleur ressemble à ceci "# aca688ff", où il doit être ex: "# F50057" (code alphanumérique à 6 lettres sans opaque).

J'espère que la solution ci-dessus vous aidera à résoudre le problème.

0