11

Dopo aver definito un colore personalizzato per la freccia indietro nella barra delle azioni, viene quindi restituito un avviso. Cosa si può fare per sbarazzarsi di questo avvertimento?Contrassegnato come avviso privato dopo aver cambiato il colore della freccia su

 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 risorsa @ drawable/abc_ic_ab_back_mtrl_am_alpha è contrassegnato come privato in com.android.support:appcompat-v7

+0

Ho visto alcuni post riguardanti problemi di sistema di accesso drawable dopo l'ultimo aggiornamento di Android Studio. Questo non risponde alla tua domanda direttamente, ma consiglierei a questo [it] (https://github.com/konifar/android-material-design-icon-generator-plugin "Material Icons Generator") come plugin per facilmente importando le icone di Material Design nel tuo progetto. – PPartisan

risposta

2

Sembra che sia un bug in Android questo post formare un membro del progetto in Android progetto Open Source - Issue Tracker

Rispondendo ad una simile Issue

La causa principale è che quando una libreria dipende da un'altra libreria, importa tutte le risorse da tutte le librerie da cui dipende nel suo file R.txt (nel file AAR) dichiarato da .

Tuttavia, non include la dichiarazione public.txt da quelle dipendenze , quindi ora finisce per esporre questi simboli come dichiarato ma non pubblico - ad es. privato.

sto valutando due alternative: fix

(1) nella ricerca di visibilità risorsa per una biblioteca, togliere qualunque simboli importati da una dipendenza (o meno che la dipendenza fornisce informazioni di visibilità), o

(2) invertire la logica di ricerca della visibilità: se troviamo un simbolo come pubblico in qualsiasi libreria, considerarlo pubblico piuttosto che la logica corrente che dice che se un simbolo è dichiarato come privato ovunque, lo è.

Penso di andare con 2; la logica corrente non ha senso quando considerando lo scenario in cui i simboli finiscono nelle librerie downstream .

come hanno detto:

L'unica soluzione per ora è quello di disattivare il controllo delle risorse lint privato :

android { 
     lintOptions { 
      disable 'PrivateResource' 
     } 
    } 

che stanno dicendo che era stato fissato, ma ho avuto corri attraverso questo problema oggi e sto usando Android Studio 1.5.1 e gradle 1.5

9

Invece di fare Mohammad's

android { 
    lintOptions { 
     disable 'PrivateResource' 
    } 
} 

Suggerirei di fare quanto segue, che è una correzione locale per una dichiarazione. Il vantaggio non è dover disattivare i controlli dei pelucchi a livello globale (che può essere facilmente dimenticato di riattivare in seguito).

Per XML:

tools:ignore="PrivateResource" 

Per Codice:

@SuppressLint("PrivateResource") 

efficace, il codice allora dovrebbe essere simile a questa:

XML:

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

Codice:

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

Vedere Private Resources in Android Libraries per motivi e risolvere.

In breve, drawable/abc_ic_ab_back_mtrl_am_alpha proviene da appcompat-v7 ed è destinato a essere utilizzato solo da quella libreria.. Non dovresti usarlo.

Se davvero si vuole usarlo, copiarlo al progetto

la pratica migliore è quella di copiare le risorse per uso privato