web-dev-qa-db-fra.com

Marqué comme avertissement privé après avoir changé la couleur de la flèche vers le haut

Après avoir défini une couleur personnalisée pour la flèche de retour dans la barre d’actions, un avertissement est alors renvoyé. Que peut-on faire pour se débarrasser de cet avertissement?

        final Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_mtrl_am_alpha);
        upArrow.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
        actionBar.setHomeAsUpIndicator(upArrow);

La ressource @ drawable/abc_ic_ab_back_mtrl_am_alpha est marquée comme privée dans com.Android.support:appcompat-v7

14
MacaronLover

Voir Choisir les ressources à rendre public pour la raison.

En résumé, drawable/abc_ic_ab_back_mtrl_am_alpha est une ressource privée de appcompat-v7 et est destiné à être utilisé uniquement par cette bibliothèque. Vous ne devriez pas l'utiliser.

Si vous voulez vraiment l'utiliser, copiez-le dans votre projet

12
lazybug

Au lieu de faire Mohammad

Android {
    lintOptions {
        disable 'PrivateResource'
    } 
}

Je vous recommande de procéder comme suit: il s'agit d'un correctif local pour une instruction. L'avantage est de ne pas avoir à désactiver les contrôles de charpie globalement (il est facile d'oublier de réactiver l'activation ultérieurement). 

Pour XML:

tools:ignore="PrivateResource"

Pour le code: 

@SuppressLint("PrivateResource")

Effectivement, votre code devrait alors ressembler à ceci:

XML:

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
    tools:ignore="PrivateResource" />

Code:

@SuppressLint("PrivateResource")
final Drawable upArrow = ContextCompat.getDrawable(context, R.drawable.abc_ic_ab_back_mtrl_am_alpha);
13
Freisturz

Il semble que ce soit un bogue sous Android Ce message forme un membre du projet sous Android Projet Open Source - Issue Tracker

Répondre à un problème similaire Numéro

La cause principale est que, lorsqu'une bibliothèque dépend d'une autre bibliothèque, Importe toutes les ressources de toutes les bibliothèques dont elle dépend dans son Propre, déclaré R.txt (dans le fichier AAR). 

Cependant, il n'inclut pas la déclaration public.txt de ces dépendances . Il finit donc par exposer ces symboles tels qu'ils ont été déclarés, mais N'est pas public - par exemple. privé. 

J'envisage deux solutions de rechange: 

(1) dans la recherche de visibilité des ressources pour une bibliothèque, supprimez tous les symboles Importés d'une dépendance (que cette dépendance Fournisse ou non des informations de visibilité), ou 

(2) inversez la logique de recherche de visibilité: si vous trouvez un symbole public Dans une bibliothèque, considérez-le comme public plutôt que dans la logique actuelle selon laquelle Indique que si un symbole est déclaré privé partout, il est. 

Je pense que je vais avec 2; la logique actuelle n’a aucun sens lorsque considère le scénario selon lequel les symboles sont alignés dans les bibliothèques en aval.

comme ils ont dit:

La seule solution pour l'instant consiste à désactiver la vérification des ressources privées :

    Android {
        lintOptions {
            disable 'PrivateResource'
        } 
    }

ils disent que cela a été corrigé, mais que j'avais examiné ce problème aujourd'hui et que j'utilise Android Studio 1.5.1 et Gradle 1.5.

2
Mohammad

Bien que je préfère garder les suppressions Lint aussi proches que possible de la source, comme c'est le cas dans cette réponse , si cela ne fonctionne pas, il est également possible de répertorier les suppressions dans un fichier lint.xml situé dans votre dossier app. Cela ressemblerait à quelque chose comme:

<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="<issue-id>">
    <ignore path="<path-to-source>.<file-extension>"/>
</issue>

Où numéro-id est le type que vous souhaitez supprimer, par exemple UseSparseArrays. Android Studio complétera également automatiquement ce champ pour vous.

0
fejd