2015-11-19 8 views
7

मैं ContextCompat.GetColor के साथ Resources.GetColor को प्रतिस्थापित करने की कोशिश कर रहा हूं लेकिन आखिरी वाला कोई रंग नहीं लौटाता है और मुझे संसाधनों के बजाय मुझे क्या उपयोग नहीं करना चाहिए। गेटकोलर (जो बहिष्कृत हो गया एपीआई 23 से)। क्या कोई मेरी मदद कर सकता है (नीचे देखें कि मैं क्या हासिल करना चाहता हूं)?ContextCompat.GetColor रंग वापस नहीं कर रहा है

Button.SetBackgroundColor(ContextCompat.GetColor(this, Resource.Color.LightRed)); 

ध्यान दें कि मैं ज़ैमरिन का उपयोग करता हूं, लेकिन अगर आपके पास जावा में जवाब है तो मैं इसे आसानी से अनुकूलित कर सकता हूं। धन्यवाद!

+0

मैंने इसे जावा में इस्तेमाल किया, यह मेरे लिए btn.setBackgroundColor (ContextCompat.getColor (यह, R.color.red) के रूप में काम करता है); – curiousMind

+0

मैंने पहले से ही ऐसा करने की कोशिश की और काम नहीं किया। मैं इसे SetBackgroundResource (Resource.Color.LightRed) के साथ करने में कामयाब रहा, लेकिन उत्तर से संस्करण में समस्या क्या है, लेकिन मैं अभी भी उत्सुक हूं। –

+0

"रंग वापस नहीं करता" से आपका क्या मतलब है? आपके कॉल द्वारा 'ContextCompat.getColor (...)' पर वापस दिया गया मान क्या है? – alanv

उत्तर

1

ContextCompat बस आपके रंग का एक पूर्णांक प्रतिनिधित्व देता है। आपको इसे अपने आरजीबी भागों को विभाजित करके एंड्रॉइड रंग में बदलने की जरूरत है। इस

using Android.Graphics; 

public static Color GetColorFromInteger(int color) 
{ 
    return Color.Rgb(Color.GetRedComponent(color), Color.GetGreenComponent(color), Color.GetBlueComponent(color)); 
} 

की तरह है और अपने विधि

btn.SetBackgroundColor(GetColorFromInteger(ContextCompat.GetColor(this, Resource.Color.LightRed); 
+0

मुझे इस तरह का अनैतिक लगता है। वे GetColor वापसी मूल्य क्यों बदलेंगे? यदि आप इसे कई स्थानों पर उपयोग करते हैं तो उपरोक्त संस्करण को केवल ContextCompat के साथ संसाधनों को प्रतिस्थापित करने के लिए कठिन होगा (और पैरामीटर के रूप में संदर्भ जोड़ें)। –

+0

यह बहुत परेशान है, पता नहीं क्यों उन्होंने वापसी मूल्य बदल दिया। हालांकि ContextCompat के साथ आप क्या बदलेंगे? मैं वास्तव में इसे समझ में नहीं आता। क्या मेरा समाधान आपके लिए काम करता है? ' –

+1

ने कोशिश नहीं की है। इस मामले में मैंने SetBackgroundResource (Resource.Color.LightRed) किया था। मुझे यह और अधिक सुविधाजनक लगता है। इसके अलावा मुझे एक ही परिणाम मिलते हैं। –

0

में कुछ का उपयोग करें मैं एक ही समस्या मुझे लगता है कि था - और विधि के शीर्ष पर एनोटेशन @SuppressWarnings("ResourceAsColor") जोड़कर संकल्प लिया।

कारण यह है कि, मेरी राय में, लिंट इस पल में नए एपीआई को नहीं पहचानता है, भले ही यह मान्य है। दोनों विधियां एक पूर्णांक लौटाती हैं जो एक हल रंग का प्रतिनिधित्व करती है। मेरे परीक्षण में संसाधन। गेटकोलर() और ContextCompat.GetColor() एक ही मान वापस करते हैं।

Should pass resolved color instead of resource id here: `getResources().getColor(titleColor)` 

... जो मतलब नहीं है, क्योंकि मैं एक संकल्प लिया रंग गुजर रहा हूँ: हालांकि, जब उसे का उपयोग कर रहा एंड्रॉयड स्टूडियो में एक त्रुटि कह मिलता है। यह सिर्फ int है, तो मैं गलत कैसे हो सकता हूं ... तो निष्कर्ष में, मुझे लगता है कि लिंट त्रुटि को दबाकर इस समय स्थिति को संभालने का एक वैध तरीका है।

यदि आप असहमत हैं तो कृपया अपनी आवाज उठाएं, मुझे रूचि होगी।

संबंधित मुद्दे