2015-06-19 7 views
17

क्या एंड्रॉइड बटन में ड्रॉइंग लेफ्ट को टेंट करना संभव है? मेरे पास एक काला खींचने योग्य है जिसे मैं सफेद रंग देना चाहता हूं। मुझे पता है कि इसे एक छवि दृश्य (बाईं ओर की छवि) के साथ कैसे प्राप्त किया जाए, लेकिन मैं इसे डिफ़ॉल्ट एंड्रॉइड बटन से करना चाहता हूं।एंड्रॉइड बटन ड्रायरेबल टिंट

enter image description here

मेरे स्रोत कोड:

<Button android:layout_height="wrap_content" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="@string/drawer_quizzes" 
     android:backgroundTint="@color/md_light_green_500" 
     android:stateListAnimator="@null" 
     android:textColor="#fff" 
     android:textSize="12dp" 
     android:fontFamily="sans-serif" 
     android:drawableLeft="@drawable/ic_action_landscape" 
     android:gravity="left|center_vertical" 
     android:drawablePadding="8dp" 
     /> 

वहाँ बटन टिंट कोई तरीका है? या इस प्रभाव को प्राप्त करने के लिए कोई कस्टम व्यू विधि है?

चरण 1::

+0

ताकि आप बटन में टेक्स्ट के बाईं ओर एक छवि रखना चाहते हैं? –

+0

@ हावराखालिल हाँ, बिल्कुल। लेकिन यह सफ़ेद –

+1

यहां लिखा जाना चाहिए https://code.google.com/p/android/issues/detail?id=198613 अगर आप ड्रॉइंग टिंट को समर्थन लाइब्रेरी में जाना चाहते हैं –

उत्तर

38

आप इस विधि के साथ एक बटन पर drawableleft रंग प्राप्त कर सकते हैं माता पिता तत्व के रूप में बिटमैप के साथ एक drawable संसाधन फ़ाइल बनाएँ के रूप में drawable फ़ोल्डर के अंतर्गत नीचे दिखाया गया है और यह नाम ic_action_landscape.xml रूप

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@android:drawable/ic_btn_speak_now" 
    android:tint="@color/white" /> 

चरण 2:

<Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:backgroundTint="@color/md_light_green_500" 
     android:drawableLeft="@drawable/ic_action_landscape" 
     android:drawablePadding="8dp" 
     android:fontFamily="sans-serif" 
     android:gravity="left|center_vertical" 
     android:stateListAnimator="@null" 
     android:text="@string/drawer_quizzes" 
     android:textColor="#fff" 
     android:textSize="12dp" /> 
012 से नीचे के रूप में अपने लेआउट में अपनी बटन नियंत्रण बनाएं

बटन @and39: drawable या drawable png (ओं) के बजाय ड्रॉबल फ़ोल्डर से ic_action_landscape.xml से ड्रॉ करने योग्य हो जाता है।

विधि 2:
चरण 1:
तुम भी छवि के रूप में अग्रभूमि के साथ एक एक्शन बार और टैब प्रतीक है कि एक कस्टम स्थान या एक क्लिप आर्ट

चरण 2 से आयात किया जा सकता के रूप में आइकन जोड़ सकते हैं:
विषय लटकती के तहत चयन कस्टम

चरण 3:
फिर अग्रभूमि रंग चयन में #FFFFFF के रूप में रंग का चयन करें। Method 2 Pictorial representation

अंत में छवि जोड़ने के लिए विज़ार्ड को समाप्त करें, फिर छवि के रूप में खींचने योग्य जोड़ें।

Pictorial representation for answer to the question

+0

धन्यवाद, मैं अब पहली विधि का उपयोग कर रहा हूं क्योंकि मैं यूई के अन्य हिस्सों में (काला) आइकन का भी उपयोग करना चाहता हूं। –

+14

हालांकि ध्यान रखें, कि टिंट विशेषता केवल लॉलीपॉप के बाद समर्थित है। प्री-लॉलीपॉप समर्थन के लिए, मैंने निम्नलिखित कोड का उपयोग बटन को प्रोग्राम करने योग्य तरीके से टेंट करने के लिए किया था: 'ड्रायबल [] drawables = postButton.getCompoundDrawables(); \t \t \t Drawable wrapDrawable = DrawableCompat.wrap (drawables [0]); \t \t \t DrawableCompat.setTint (wrapdrawable, getResources()। Getcolor (android.R.color.white)); ', समर्थन-v4 लाइब्रेरी का उपयोग कर। – Boris

+0

ऐसा लगता है कि विधि 1 केवल डिफ़ॉल्ट आइकन (एंड्रॉइड से) के लिए काम करता है। अगर हम अपने संसाधनों पर एक नया आइकन जोड़ते हैं, तो यह मेरे अंत में काम नहीं करता है। सिर्फ एक नोट। – vida

1

रूप @Boris सुझाव दिया है, तो आप समर्थन लाइब्रेरी का उपयोग कर सकते हैं।

मैंने कुछ draft code के साथ AppCompat बटन को बढ़ा दिया है। TintAppCompatButton में डिफ़ॉल्ट व्यवहार होना चाहिए लेकिनTintAppCompatButtonCustom कस्टम रंग डेमो के लिए बनाया गया था।

मैं देखता हूं कि मैं आधिकारिक समर्थन पुस्तकालय में प्राप्त करने के लिए पीआर बढ़ा सकता हूं या नहीं।

हित के कोड है:

private void init() { 
    PorterDuff.Mode tintMode = PorterDuff.Mode.SRC_IN; 
    Drawable[] ds = getCompoundDrawables(); 
    tint(ds[LEFT], Color.RED, tintMode); 
    tint(ds[TOP], Color.YELLOW, tintMode); 
    tint(ds[RIGHT], Color.GREEN, tintMode); 
    tint(ds[BOTTOM], Color.BLUE, tintMode); 
} 

private void tint(Drawable d, int color, PorterDuff.Mode tintMode) { 
    TintInfo ti = new TintInfo(); 
    ti.mTintMode = tintMode; 
    ti.mTintList = ColorStateList.valueOf(color); 
    ti.mHasTintList = true; 
    ti.mHasTintMode = true; 

    TintManager.tintDrawable(d, ti, new int[]{0}); 
} 
1

मैं इस पर देर से हो सकता है, लेकिन आप सी # का उपयोग कर रहे हैं, तो आप इसे इस तरह कर सकते हैं:

Color iconColor = Color.Orange; // TODO: Get from settings 
Mode mode = Mode.SrcAtop; 

Drawable drawable = ResourcesCompat.GetDrawable(Resources, Resource.Drawable.ic_action_arrest, null); 

drawable.SetColorFilter(iconColor, mode); 

तुम भी आवश्यकता होगी :

using Android.Graphics; 
using static Android.Graphics.PorterDuff; 
using Android.Graphics.Drawables; 

उम्मीद है कि इससे मदद मिलती है। यह मुझे मिला सबसे आसान तरीका है। नोट भी, कि आपके ऐप में कोई भी स्थान जो आप इस आइकन का उपयोग कर रहे हैं, यह यह रंग होगा।

0

मुझे पता है कि पहले से ही बहुत सारे उत्तर हैं, लेकिन उनमें से कोई भी मुझे खुश नहीं करता क्योंकि मैं तत्वों की विभिन्न शैलियों के लिए अलग-अलग ड्रॉबल्स नहीं चाहता था।

तो मेरी समाधान इस तरह निर्माता में रंग फिल्टर स्थापित करने के लिए किया गया था:

int textColor = getTextColors().getColorForState(EMPTY_STATE_SET, Color.WHITE); 
    Drawable[] drawables = getCompoundDrawablesRelative(); 
    for (Drawable drawable : drawables) { 
     if(drawable != null) { 
      drawable.setColorFilter(textColor, PorterDuff.Mode.SRC_ATOP); 
     } 
    } 

मैं पाठ रंग का इस्तेमाल किया क्योंकि यह मैं क्या जरूरत थी, लेकिन यह अधिक dinamic होने के लिए कस्टम विशेषता वाले बदला जा सकता है।

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