Question 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 arrière 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


13
2017-10-03 20:39


origine


Réponses:


Au lieu de faire Mohammad

android {
    lintOptions {
        disable 'PrivateResource'
    } 
}

Je vous recommande de faire ce qui suit, qui est un correctif local pour une déclaration. L'avantage est de ne pas avoir à désactiver les contrôles de peluches globalement (ce qui peut facilement être oublié pour être réactivé 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);

12
2017-12-08 09:50



Voir Ressources privées dans les bibliothèques Android pour raison et correction.

En bref, drawable / abc_ic_ab_back_mtrl_am_alpha provient de appcompat-v7 et est destiné à être utilisé seulement par cette bibliothèque. Vous ne devriez pas l'utiliser.

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

la meilleure pratique consiste à copier les ressources pour un usage privé


9
2018-04-02 09:42



Il semble que ce soit un bug dans Android ce post forme un membre du projet dans Android Open Source Project - Issue Tracker

Répondre à un similaire Problème 

La cause profonde est que lorsque une bibliothèque dépend d’une autre bibliothèque,   il importe toutes les ressources de toutes les bibliothèques dont il dépend dans son   propre déclaré R.txt (dans le fichier AAR).

Cependant, il n'inclut pas la déclaration public.txt de ceux   dépendances, maintenant il finit par exposer ces symboles comme déclaré, mais   pas public - par ex. privé.

J'envisage deux solutions de rechange:

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

(2) inverser la logique de recherche de visibilité: si nous trouvons un symbole comme public   dans toute bibliothèque, considérez-le comme public plutôt que la logique actuelle qui   dit que si un symbole est déclaré privé n'importe où, il l'est.

Je pense que je vais avec 2; la logique actuelle n'a pas de sens quand   compte tenu du scénario que les symboles se retrouvent en ligne en aval   bibliothèques.

comme ils ont dit:

La seule solution pour le moment consiste à désactiver la ressource de ressources privées   vérifier:

    android {
        lintOptions {
            disable 'PrivateResource'
        } 
    }

ils disent que cela a été corrigé, mais je suis tombé sur ce problème aujourd'hui et j'utilise Android Studio 1.5.1 et gradle 1.5


2
2017-12-04 16:18