it-swarm.com.de

Holen Sie sich Farbe aus Farbe Ressource

Gibt es eine Möglichkeit, ein Color-Int von einer Farbressource zu erhalten? Ich versuche, die einzelnen roten, blauen und grünen Komponenten einer Farbe in der Ressource (R.color.myColor) so zu definieren, dass ich festlegen kann die Werte von drei Suchleisten auf ein bestimmtes Niveau.


Für weitere Informationen zu einem anderen Anwendungsfall, der diese Frage in den Suchergebnissen ansprechen kann, wollte ich Alpha auf eine in meinen Ressourcen definierte Farbe anwenden.

Verwendung der richtigen Antwort von @ sat:

int alpha = ... // 0-255, calculated based on some business logic
int actionBarBackground = getResources().getColor(R.color.actionBarBackground);
int actionBarBackgroundWithAlpha = Color.argb(
        alpha,
        Color.red(actionbarBackground),
        Color.green(actionbarBackground),
        Color.blue(actionbarBackground)
);
364
ataulm

Sie können verwenden:

getResources().getColor(R.color.idname);

Hier erfahren Sie, wie Sie benutzerdefinierte Farben definieren:

http://sree.cc/google/Android/defining-custom-colors-using-xml-in-Android

EDIT (1): Da getColor(int id)deprecated ist, muss dies verwendet werden:

ContextCompat.getColor(context, R.color.your_color);

(hinzugefügt in Support Library 23)

EDIT (2):

Der folgende Code kann sowohl vor als auch nach Marshmallow (API 23) verwendet werden.

ResourcesCompat.getColor(getResources(), R.color.your_color, null); //without theme

ResourcesCompat.getColor(getResources(), R.color.your_color, your_theme); //with theme
795
sat

Basierend auf der neuen Android Support Library (und this update) sollten Sie jetzt anrufen:

ContextCompat.getColor(context, R.color.name.color);

Nach der Dokumentation :

public int getColor (int id)

Diese Methode wurde in der API-Ebene 23 ..__ nicht mehr unterstützt. Verwenden Sie stattdessen getColor (int, Theme)

Es ist die gleiche Lösung für getResources().getColorStateList(id):

Sie müssen es so ändern: 

ContextCompat.getColorStateList(getContext(),id);
104
Ultimo_m

Definiere deine Farbe

values ​​/ color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- color int as #AARRGGBB (alpha, red, green, blue) -->
    <color name="orange">#fff3632b</color>
    ...
    <color name="my_view_color">@color/orange</color>

</resources>

Holen Sie sich die Farbe int und setzen Sie sie

int backgroundColor = ContextCompat.getColor(context, R.color.my_view_color);
// Color backgroundColor = ... (Don't do this. The color is just an int.)

myView.setBackgroundColor(backgroundColor);

Siehe auch

30
Suragch

Ich habe die Funktion ContextCompat.getColor(context, R.color.your_color); aktualisiert, aber manchmal (bei einigen Geräten/Android-Versionen. Ich bin mir nicht sicher) führt dies zu einem NullPointerExcepiton.

Damit es auf allen Geräten/Versionen funktioniert, greife ich bei einem Nullzeiger auf die alte Vorgehensweise zurück.

try {
    textView.setTextColor(ContextCompat.getColor(getActivity(), R.color.text_grey_dark));
}
catch(NullPointerException e) {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        textView.setTextColor(getContext().getColor(R.color.text_grey_dark));
    }
    else {
        textView.setTextColor(getResources().getColor(R.color.text_grey_dark));
    }
}
3
ninjachippie

Bester Ansatz

Als @sat Antwort ist ein guter Ansatz, um Farbe zu bekommen

ResourcesCompat.getColor(getResources(), R.color.your_color, null);

oder verwenden Sie unten, wenn Sie keinen Zugriff auf die getResources()-Methode haben.

Context context  = getContext(); // like Dialog class
ResourcesCompat.getColor(context.getResources(), R.color.your_color, null);

Was ich mache ist

public void someMethod(){
    ...
    ResourcesCompat.getColor(App.getRes(), R.color.your_color, null);
}

Es ist am einfachsten, überall in Ihrer App zu verwenden! Sogar in der Util-Klasse oder einer Klasse, in der Context oder getResource () nicht vorhanden ist

Problem (wenn Sie keinen Kontext haben)

Wenn Sie keinen Context-Zugriff haben wie eine Methode in Ihrer Util-Klasse.

Angenommene Methode ohne Kontext.

public void someMethod(){
    ...
    // can't use getResource() without Context.
}

Nun übergeben Sie in dieser Methode Context als Parameter und verwenden getResources()..

public void someMethod(Context context){
    ...
    context.getResources...
}

Hier ist also eine Bonus-einzigartige Lösung , mit der Sie von überall auf Ressourcen wie Util class ..__ zugreifen können. Fügen Sie Resources zu Ihrer Application-Klasse hinzu oder erstellen Sie eine, falls nicht vorhanden.

import Android.app.Application;
import Android.content.res.Resources;

public class App extends Application {
    private static App mInstance;
    private static Resources res;


    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
        res = getResources();
    }

    public static App getInstance() {
        return mInstance;
    }

    public static Resources getResourses() {
        return res;
    }

}

Fügen Sie Ihrem manifest.xml<application-Tag ein Namensfeld hinzu. (Falls noch nicht hinzugefügt)

<application
        Android:name=".App"
        ...
        >
        ...
    </application>

Jetzt bist du gut zu gehen. Verwenden Sie ResourcesCompat.getColor(App.getRes(), R.color.your_color, null); überall in der App.

2
Khemraj

ContextCompat.getColor (context, R.color.your_color);

in Aktivität

ContextCompat.getColor (actvityname.this, R.color.your_color);

in fragment

ContextCompat.getColor (getActivity (), R.color.your_color);

für zB:

tvsun.settextcolour (ContextCompat.getColor (getActivity (), R.color.your_color))

0
indrajeet jyoti

Die Antworten hier sind zu kompliziert. Keine Unterstützungsbibliotheken erforderlich.

Vor API 23 (Marshmallow)

getResources().getColor(R.color.idname);

Nach dem

getResources().getColor(R.color.idname, null);

Fügen Sie einen Scheck hinzu und Sie sind fertig:

int color = Build.VERSION.SDK_INT<23 ? getResources().getColor(R.color.idname) : getResources().getColor(R.color.idname,null)
0
MattSchmatt

Der Zugriff auf Farben von einer Nichtaktivitätsklasse kann schwierig sein. Eine der Alternativen, die ich gefunden habe, war enum. enum bietet viel Flexibilität.

public enum Colors
{
  COLOR0(0x26, 0x32, 0x38),    // R, G, B
  COLOR1(0xD8, 0x1B, 0x60),
  COLOR2(0xFF, 0xFF, 0x72),
  COLOR3(0x64, 0xDD, 0x17);


  private final int R;
  private final int G;
  private final int B;

  Colors(final int R, final int G, final int B)
  {
    this.R = R;
    this.G = G;
    this.B = B;
  }

  public int getColor()
  {
    return (R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff);
  }

  public int getR()
  {
    return R;
  }

  public int getG()
  {
    return G;
  }

  public int getB()
  {
    return B;
  }
}
0
Confuse