प्रोग्राम रंग कैसे प्राप्त करें?


87

कोई भी नीचे, प्रोग्राम की तरह, शैलियों में उच्चारण रंग कैसे लाएगा?

    <item name="android:colorAccent">@color/material_green_500</item>

3
किसी को भी मतदान करने के लिए टिप्पणी में अपने विचारों को पोस्ट करने के लिए वास्तव में बहुत स्वतंत्र महसूस करना चाहिए ...
जैकब

जवाबों:


130

आप इसे वर्तमान थीम से इस प्रकार प्राप्त कर सकते हैं:

private int fetchAccentColor() {
    TypedValue typedValue = new TypedValue();

    TypedArray a = mContext.obtainStyledAttributes(typedValue.data, new int[] { R.attr.colorAccent });
    int color = a.getColor(0, 0);

    a.recycle();

    return color;
}

समर्थन संस्करण के बारे में क्या?
डेरेलल

4
यह सपोर्ट वर्जन है।
रोस्कोवती

क्या हम RGB स्ट्रिंग को colorPrimary में style.xml या color.xml में सेट कर सकते हैं ??
तनवीर बुलसारी

2
यह मेरे लिए एक नकारात्मक संख्या लौटा रहा है। क्या यह अभी भी उच्चारण का रंग पाने का वैध तरीका है?
नव

1
टाइप किए गएवैल्यू.डैट किसके संदर्भ में है?
जीपैक

45

यह मेरे लिए भी काम किया:

public static int getThemeAccentColor (final Context context) {
    final TypedValue value = new TypedValue ();
    context.getTheme ().resolveAttribute (R.attr.colorAccent, value, true);
    return value.data;
}

मुझे इस समस्या में भी समान समस्या है, निगेटिव वैल्यू, और यह गिरता है :(
batsheva

2
ऋणात्मक मान ठीक है। यह एक रंग है!
कोपोली

लेकिन किसी भी संसाधन नहीं मिला है, जब मैं एक नियमित रूप से रंग डालते हैं, तो ऐसा नहीं होता है! इसलिए मान ठीक नहीं है
batsheva

फिर यदि संसाधन नहीं मिला तो ऋणात्मक मान कहां से आएगा? मैं केवल इतना कह रहा हूं कि 0xff2506ac (उदाहरण के लिए) ऋणात्मक संख्या और वैध रंग मान है।
कोपोली

2
नकारात्मक मूल्य है कि आप प्राप्त है वास्तविक रंग नहीं संसाधन आईडी। संसाधन आईडी के रूप में इसका उपयोग न करें।
कोपोली

28
private static int getThemeAccentColor(Context context) {
    int colorAttr;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        colorAttr = android.R.attr.colorAccent;
    } else {
        //Get colorAccent defined for AppCompat
        colorAttr = context.getResources().getIdentifier("colorAccent", "attr", context.getPackageName());
    }
    TypedValue outValue = new TypedValue();
    context.getTheme().resolveAttribute(colorAttr, outValue, true);
    return outValue.data;
}

2
यह एकमात्र उत्तर है जो ऐप R वर्ग के आयात पर भरोसा नहीं करता है, जो कस्टम दृश्यों के निर्माण के लिए आदर्श है।
एलन वेलोसो

12

कोटलिन का उपयोग करने वालों के लिए

fun Context.themeColor(@AttrRes attrRes: Int): Int {
    val typedValue = TypedValue()
    theme.resolveAttribute (attrRes, typedValue, true)
    return typedValue.data
}

11

वर्तमान विषय से रंग प्राप्त करने के लिए मेरे पास एक बर्तन वर्ग पर एक स्थिर विधि है। अधिकांश समय रंगप्रेमियों, रंगप्रेमरीदार्क और लहजे के रंग का होता है, लेकिन आप बहुत अधिक प्राप्त कर सकते हैं।

@ColorInt
public static int getThemeColor
(
        @NonNull final Context context,
        @AttrRes final int attributeColor
)
{
    final TypedValue value = new TypedValue();
    context.getTheme ().resolveAttribute (attributeColor, value, true);
    return value.data;
}

7

यहाँ मेरा इस पर है:

public static String getThemeColorInHex(@NonNull Context context, @NonNull String colorName, @AttrRes int attribute) {
    TypedValue outValue = new TypedValue();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        context.getTheme().resolveAttribute(attribute, outValue, true);
    } else {
        // get color defined for AppCompat
        int appCompatAttribute = context.getResources().getIdentifier(colorName, "attr", context.getPackageName());
        context.getTheme().resolveAttribute(appCompatAttribute, outValue, true);
    }
    return String.format("#%06X", (0xFFFFFF & outValue.data));
}

उपयोग:

    String windowBackgroundHex = getThemeColorInHex(this, "windowBackground", android.R.attr.windowBackground);
    String primaryColorHex = getThemeColorInHex(this, "colorPrimary", R.attr.colorPrimary);

2
String.format()कैसे एक हेक्स रंग स्ट्रिंग के लिए नकारात्मक पूर्णांक मान परिवर्तित करने के लिए समझाने के लिए मदद करता है।
श्री-आईडीई

1
यह इस प्रश्न के लिए स्वीकृत उत्तर की तुलना में बहुत बेहतर / सामान्य समाधान है!
नीलेश पवार

इसके अलावा उपयोगी: stackoverflow.com/questions/6539879/…
श्री-आईडीई

1

कोटलिन समाधान:

    context.obtainStyledAttributes(TypedValue().data, intArrayOf(R.attr.colorAccent)).let {
        Log.d("AppLog", "color:${it.getColor(0, 0).toHexString()}")
        it.recycle()
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.