Opgeloste kleur in plaats van een resource-ID

Ik heb onlangs een pluisfout in mijn code gezien:

Moet hier de opgeloste kleur doorgeven in plaats van de resource-ID:
getResources().getColor(R.color.maps_list_background_color)
MyClass.java /myapp/android/maps line 107 Android Lint Probleem

Ik weet hoe ik het moet oplossen, het antwoord zit in de fout, het punt is dat ik niet begrijp waarom ze deze fout in de linter hebben toegevoegd.


Antwoord 1, autoriteit 100%

Methoden die een kleur aannemen in de vorm van een geheel getal, moeten een RGB triple krijgen, niet de werkelijke kleurbron-ID. U moet getResources.getColor(resource) aanroepen.

De functie die u aanroept, verwacht een geheel getal dat een RGB-triple is, niet alleen de id van een kleurbron. De kleurbron-ID is nog steeds een geheel getal, maar zou niet de kleur produceren die u verwacht als deze als RGB-triple zou worden gebruikt. Om het de juiste RGB-triple voor uw kleur door te geven, moet u het oplossen met de getResources().getColor(R.color.example_color)-aanroep.


Antwoord 2, autoriteit 83%

Omdat ik dit nog steeds op Google vind en het verouderd is, dacht ik dat ik net zo goed de huidige methode kon delen om dit te doen.

controleer getResources().getColor() is verouderd

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

Antwoord 3, autoriteit 12%

Gebruik annotatie @ColorIntom te bevestigen dat dit een kleur is en geen kleurreferentie-ID.

Zie:
android.support.annotation.ColorInt


Antwoord 4, autoriteit 12%

Aangezien getResources().getColor()is verouderd, moet u dit doen om de kleur te krijgen:

int color = ContextCompat.getColor(getContext(),your_color_id);

Nu heb je de kleur met betrekking tot de huidige context
Stel de kleur in met:

your_view.setBackgroundColor(color);

Antwoord 5, autoriteit 7%

Wat mij betreft, het is een erg domme waarschuwing.

Ik heb een eigen klas met functie:

public static final void setBackgroundColor(View v, int id) {
// Here I get color by id from resources and setBackgroundColor of this color.
}

Hoe dan ook, als ik probeer setBackgroundColorte bellen, krijg ik een waarschuwing. Maar waarom?

Dus ik deed het simpel: hernoem setBackgroundColornaar setBackgroundColorr.

Deze waarschuwing wordt geactiveerd als naam colorwordt gevonden bij functienaam.

En ja, ik hou niet van naam setColorBackground of iets anders 🙂


Antwoord 6

Als je Androidx gebruikt, kun je het volgende doen:

requireContext().getColor(R.color.myColor);

Antwoord 7

Blijkbaar wordt dit veroorzaakt door pluisjes; derde opsommingsteken neer.

Nieuwe lintregels

Je zou dit waarschijnlijk kunnen onderdrukken, of proberen hun syntaxis te implementeren.

Other episodes