2015-08-05 4 views
265

Verwendung: buildToolsVersion "22.0.1", targetSdkVersion 22 in meiner Gradle-Datei.getResources(). GetColor() ist veraltet

Ich fand, dass die nützliche getResources().getColor(R.color.color_name) veraltet ist.

Was sollte ich stattdessen verwenden?

+0

Wo siehst du das? http://developer.android.com/reference/android/content/res/Resources.html#getColor (de) –

+4

Dies wurde hier diskutiert: http://StackOverflow.com/questions/31590714/getcolortin-id-deprecated -on-android-mnc-preview-2 – BrentM

+4

Verwenden ContextCompat.getColor (Kontext, R.color.color_name) –

Antwort

618

Es ist wie der beste Ansatz aussieht, ist zu verwenden:

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

Dies wird die Eibisch zwei Parameter-Methode oder die Pre-Eibisch Methode entsprechend wählen.

20

Ich fand, dass die nützliche getResources(). GetColor (R.color.color_name) veraltet ist.

Es ist nicht veraltet in API Level 21, nach the documentation.

Es ist in der M Developer Preview veraltet. Die Ersatzmethode (ein Zwei-Parameter-Objekt getColor(), das die Farbressourcen-ID und ein Resources.Theme-Objekt annimmt) ist jedoch nur in der M Developer Preview verfügbar.

Verwenden Sie daher weiterhin die Methode mit dem Einzelparameter getColor(). Später in diesem Jahr sollten Sie die Zwei-Parameter-Methode getColor() auf Android M-Geräten verwenden und auf älteren Geräten auf die veraltete Methode mit dem Einzelparameter getColor() zurückgreifen.

20

Sie müssen ContextCompat.getColor() verwenden, das Teil der Support V4-Bibliothek ist (so funktioniert es für alle vorherigen API).

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

Wie in der Dokumentation angegeben, „in M starten, wird die zurück Farbe für den angegebenen Kontext des Themas gestylt werden“. Also keine Sorge darüber.

Sie können die Support-V4-Bibliothek hinzufügen, indem Sie die folgenden auf die Abhängigkeiten Array innerhalb der App build.gradle Zugabe:

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

gut es in android M veraltet ist, so dass Sie Ausnahme für Android M und niedriger machen müssen. Fügen Sie einfach das aktuelle Thema auf getColor Funktion hinzu. Sie können das aktuelle Thema mit getTheme() erhalten.

Dies wird den Trick in Fragment tun, können Sie getActivity() mit getBaseContext(), yourContext usw. ersetzen, die

Ihre aktuellen Kontext halten
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: Farbe wird in M ​​veraltet, aber ziehbar in L veraltet

+0

Anstelle von 'getActivity(). getTheme()' würde ich 'getContext(). getTheme()' verwenden –

+0

Es ist sehr nützlich. Es funktioniert für mich –