2015-08-05 14 views
265

Utilizzo: buildToolsVersion "22.0.1", targetSdkVersion 22 nel mio file gradle.getResources(). GetColor() è deprecato

Ho trovato che l'utile getResources().getColor(R.color.color_name) è deprecato.

Cosa dovrei usare invece?

+0

Dove lo vedi? http://developer.android.com/reference/android/content/res/Resources.html#getColor(int) –

+4

Questo è stato discusso qui: http://stackoverflow.com/questions/31590714/getcolorint-id-deprecated -on-android-mnc-preview-2 – BrentM

+4

Usa ContextCompat.getColor (context, R.color.color_name) –

risposta

618

Sembra che l'approccio migliore è quello di utilizzare:

ContextCompat.getColor(context, R.color.color_name) 

Questa sceglierà il Marshmallow due metodo di parametro o il metodo-Marshmallow pre modo appropriato.

20

Ho trovato che l'utile getResources(). GetColor (R.color.color_name) è deprecato.

Non è obsoleto in livello API 21, in base allo the documentation.

E è deprecato nell'anteprima M Developer. Tuttavia, il metodo di sostituzione (un parametro getColor() a due parametri che accetta l'ID della risorsa colore e un oggetto Resources.Theme) è disponibile solo nell'anteprima M Developer.

Quindi, al momento, continuare a utilizzare il metodo a parametro singolo getColor(). Entro la fine dell'anno, prendere in considerazione l'utilizzo del metodo a due parametri getColor() su dispositivi Android M, tornando al deprecato metodo a parametro singolo getColor() su dispositivi meno recenti.

20

È necessario utilizzare ContextCompat.getColor(), che fa parte della libreria di supporto V4 (quindi funzionerà per tutte le API precedenti).

ContextCompat.getColor(context, R.color.my_color) 

Come specificato nella documentazione, "Avvio di M, il colore restituito sarà essere in stile per il tema del contesto specificato". Quindi non c'è bisogno di preoccuparsene.

È possibile aggiungere la libreria V4 supporto aggiungendo quanto segue alla matrice di dipendenze all'interno della vostra app build.gradle:

compile 'com.android.support:support-v4:23.0.1' 
26

Beh, è ​​stata abbandonata in M ​​Android quindi è necessario fare un'eccezione per M Android e più basso. Basta aggiungere il tema attuale alla funzione getColor. È possibile ottenere il tema corrente con getTheme().

Questo farà il trucco nel frammento, è possibile sostituire getActivity() con getBaseContext(), yourContext, ecc, che tenere il contesto attuale

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
    yourTitle.setTextColor(getActivity().getResources().getColor(android.R.color.white, getActivity().getTheme())); 
}else { 
    yourTitle.setTextColor(getActivity().getResources().getColor(android.R.color.white)); 
} 

* ps: il colore è deprecato in M, ma drawable è deprecato in L

+0

Invece di 'getActivity(). getTheme()', userei 'getContext(). getTheme()' –

+0

È molto utile. Funziona per me –