2010-07-22 21 views
9

मैं एक आरईएसटी एपीआई से कुछ डेटा में पढ़ रहा हूं और ऐप को प्राप्त जानकारी के आधार पर कुछ बटन जेनरेट करने की आवश्यकता है।एंड्रॉइड - प्रोग्रामेटिक रूप से बटन रंग कैसे सेट करें

क्योंकि मुझे कई गतिविधि स्क्रीनों में एक ही बटन की आवश्यकता है, मैंने राहेलबटन बनाने के लिए बटन बढ़ाया है और मैंने इसे कन्स्ट्रक्टर में स्थापित किया है।

public RachelButton(Context context, Info info) { 
    super(context); 
    this.info= info; 

    setText(info.getTime()); 
    setTypeface(Typeface.DEFAULT, Typeface.BOLD); 

    int identifier = 0; 

    if(info.isAvailable()){ 
     identifier = getContext().getResources().getIdentifier("drawable/info_button_"+info.getType(), null, getContext().getPackageName()); 
    }else{ 
     identifier = R.drawable.info_button_unavailable; 
    } 

    if(identifier == 0){ 
     Log.e("INFO_BUTTON", "no button for "+info.getType()); 
    } 

    setBackgroundResource(identifier); 
    setTextColor(R.color.info_button_text_color); 

    setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View view) { 
      //do stuff 
     } 
    }); 
} 

फिर संसाधन मैं एक रंग का बटन उत्पन्न करने के लिए उपयोग कर रहा हूँ का एक उदाहरण यह है:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" > 
    <shape> 
     <gradient 
      android:startColor="@color/button_pressed" 
      android:endColor="@color/button_pressed" 
      android:angle="270" /> 
     <stroke 
      android:width="3dp" 
      android:color="@color/button_pressed" /> 
     <corners 
      android:radius="3dp" /> 
     <padding 
      android:left="5dp" 
      android:top="5dp" 
      android:right="5dp" 
      android:bottom="5dp" /> 
    </shape> 
</item> 

<item android:state_focused="true" > 
    <shape> 
     <gradient 
      android:endColor="@color/info_normal" 
      android:startColor="@color/info_normal" 
      android:angle="270" /> 
     <stroke 
      android:width="3dp" 
      android:color="@color/info_normal" /> 
     <corners 
      android:radius="3dp" /> 
     <padding 
      android:left="5dp" 
      android:top="5dp" 
      android:right="5dp" 
      android:bottom="5dp" /> 
    </shape> 
</item> 

<item> 
    <shape> 
     <gradient 
      android:endColor="@color/info_normal" 
      android:startColor="@color/info_normal" 
      android:angle="270" /> 
     <stroke 
      android:width="3dp" 
      android:color="@color/info_normal" /> 
     <corners 
      android:radius="3dp" /> 
     <padding 
      android:left="5dp" 
      android:top="5dp" 
      android:right="5dp" 
      android:bottom="5dp" /> 
    </shape> 
</item> 
</selector> 

आप कोड में देख सकते हैं मैं पाठ का रंग की स्थापना कर रहा हूँ और मुझे लगता है कि यकीन है कि यह रंग संसाधन के रूप में मौजूद है (धन्यवाद IntelliJ)।

लेकिन इस तरह के टेक्स्ट रंग को सेट करने पर कोई प्रभाव नहीं पड़ता है, बटन पर टेक्स्ट रंग बटन के पृष्ठभूमि रंग की गहरा छाया लगती है।

यदि कोई मुझे अगली कोशिश करने के लिए कुछ सलाह दे सकता है तो मैं सबसे अधिक सराहना करता हूं।

+0

आप Android विषयों और शैलियों पर एक नज़र रखना चाहिए:
नीचे समर्थन पुस्तकालय से स्रोत कोड है। वे आपको एक ही रूप को लागू करने और विभिन्न प्रकार के एक, अधिक या सभी यूआई तत्वों को महसूस करने की अनुमति देते हैं। –

+0

मैंने अभी इसके बारे में पढ़ना शुरू कर दिया है। – Rachel

उत्तर

43

आप क्या करना चाहिए:

setTextColor(getContext().getResources().getColor(R.color.info_button_text_color)); 
+0

धन्यवाद - यह पूरी तरह से काम करता है :) – Rachel

+0

इस – SaKet

+3

के लिए धन्यवाद ** एपीआई 23 ** से आप 'ContextCompat.getColor (संदर्भ, R.color.your_color) का उपयोग करना चाहेंगे;' [getcolorint-id-deprecated-on -android-6-0-मार्शमैलो-api-23] (http://stackoverflow.com/questions/31590714/getcolorint-id-deprecated-on-android-6-0-marshmallow-api-23) –

3

बेहतर अगर आप देखें वस्तु (findViewById आर वर्ग से) है तब्दील जानकारी विशिष्ट वस्तु: उदाहरण के बटन के लिए। (मानक तरीका - Button b = (Button) fin...(R.id.sdfsdf))

अगला बस कुछ ही एंड्रो-रंग से टाइप करें:

b.setTextColor(Color.parseColor("green")); 

या बेहतर: आरजीबी से

b.setTextColor(Color.rgb(0xff, 0x66, 0x33)); 

सब कुछ ग्रहण में ctrl+spaceBar में है: पी


क्षमा करें! शायद b.setTextColor(0xff0000) भी काम करेगा ...

0

GetColor() फ़ंक्शन एपीआई स्तर 23 से हटा दिया गया है। अधिक जानकारी के लिए यह link देखें।

public static final int getColor(Context context, int id) { 
    final int version = Build.VERSION.SDK_INT; 
    if (version >= 23) { 
     return ContextCompatApi23.getColor(context, id); 
    } else { 
     return context.getResources().getColor(id); 
    } 
} 
संबंधित मुद्दे