2017-04-14 9 views
5

में एपीआई स्तर 23 प्रोग्रामेटिक रूप से एपीआई स्तर 23 के नीचे एक बटन के ड्रॉबल टिंट को कैसे बदलें, मैं प्रोग्रामेटिक रूप से ड्रॉइंग लेफ्ट/ड्रायबल राइट के रंग को बदलने का तरीका जानने का प्रयास कर रहा हूं। नीचे के रूप में काम करता है जो उल्लेख किया है मैं अपने एक्सएमएल में drawable रंग का इस्तेमाल किया है> एपीआई स्तर 23 लेकिन रंग < एपीआई स्तर बदलने के लिए 23एंड्रॉइड

<Button 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="VIEW ALL" 
       android:layout_centerInParent="true" 
       android:background="#00000000" 
       android:drawableLeft="@mipmap/ic_menu_black_36dp" 
       android:layout_centerVertical="true" 
       android:id="@+id/view_all" 
       android:textColor="@color/bottom_color" 
       android:drawableTint="@color/bottom_color" 
       /> 
     Button prev = (Button) findViewById(R.id.prev); 

    Drawable[] drawables =prev.getCompoundDrawables(); 
     drawables[0].setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY); 
     prev.setCompoundDrawables(drawables[0],null,null,null); 

समाधान में सक्षम नहीं:

Drawable[] drawablesprev =prev.getCompoundDrawables(); 

//for drawableleft drawable array index 0 

    drawablesprev[0].setColorFilter(getResources().getColor(R.color.assessment_bottom), PorterDuff.Mode.SRC_ATOP); 

//for drawableright drawable array index 2 
drawablesprev[2].setColorFilter(getResources().getColor(R.color.assessment_bottom), PorterDuff.Mode.SRC_ATOP); 


//for drawabletop drawable array index 1 
    drawablesprev[1].setColorFilter(getResources().getColor(R.color.assessment_bottom), PorterDuff.Mode.SRC_ATOP); 
+0

'android.support.v4.graphics.drawable.DrawableCompat' और इसके 'सेटटिंट (ड्रायबल ड्रॉबल, इंट टिंट)' विधि – pskink

+0

का उपयोग करें, क्या आप इसके लिए नमूना कोड दे सकते हैं। मैं यहाँ kinnda अटक गया –

+0

क्या अटक गया? आपका कोड क्या है? – pskink

उत्तर

0

आप PorterDuff.Mode.MULTIPLY उपयोग कर रहे हैं, इसलिए आप रंग गुणा कर रहे हैं। मानते हुए (आपके ड्रॉइंग का नाम) आपका आइकन काला है - #000000 या int के रूप में यह 0 होगा। तो 0 * GRAY (या कोई अन्य रंग) हमेशा आपको 0 देगा, फिर भी काला ...

अन्य PorterDuff.Mode एस, उदाहरण के लिए प्रयास करें PorterDuff.Mode.SRC_ATOP या PorterDuff.Mode.SRC_IN

अपने वर्तमान कोड शायद जो MULTIPLY

+0

यह getCompoundDrawables का उपयोग करके काम करता है –

0

यहाँ के साथ ठीक से रंग का होना चाहिए आइकन की सफेद संस्करण, के साथ काम करेंगे की सहायता से अपना TextView या बटन drawable टिंट है:

private void tintViewDrawable(TextView view) { 
     Drawable[] drawables = view.getCompoundDrawables(); 
     for (Drawable drawable : drawables) { 
      if (drawable != null) { 
       drawable.setColorFilter(getResources().getColor(R.color.colorPrimary), PorterDuff.Mode.SRC_ATOP); 
      } 
     } 
    }