SetCompoundDrawables () कॉलिंग कंपाउंड ड्रॉबल प्रदर्शित नहीं करता है


322

मैंने setCompoundDrawablesविधि को कॉल करने के बाद , कंपाउंड ड्राएबल को नहीं दिखाया है।

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn.setCompoundDrawables(myDrawable, null, null, null);

कोई विचार?


9
जैसा कि नीचे दिए गए जवाबों में कहा गया है, विधि नाम के प्रकार को (..)WithIntrinsicBoundsबुलाया जाना चाहिए। एक साइड नोट पर, paddingकंपाउंड
ड्रॉएबल के

6
दस्तावेज़ कहते हैं: ड्रॉएबल पहले से ही था होना चाहिए setBounds(Rect)कहा जाता है।

हाय हंटरप, अभी-अभी आपको कॉफ़ी शॉप (एंजेल) में मिला था, अब मुझे पता है कि आप जानते हैं कि एंड्रॉइड ड्रॉबल्स क्या हैं (और शायद आप उनमें से कई के साथ काम करते समय मेमोरी की त्रुटियों से बाहर आ गए हैं), मैं आपको कुछ के बारे में बता सकता हूं जिन परियोजनाओं में मैंने सहयोग किया है, उन्हें इस मुद्दे से निपटना था, github.com/JakeWharton/DiskLruCache (जो मैंने अधिक एंड्रॉइड फ्रेंडली बनाने के लिए सहयोग किया था) की जाँच करें जो पिकासो ( github.com/square-picasso ) द्वारा उपयोग किया जाता है
Gubatron

@ Dr1Ku वास्तव में मेरे पास पहले भी है और वैसे भी काम करता है।
सूटी

जवाबों:


629

मुझे उपयोग करने की आवश्यकता है setCompoundDrawablesWithIntrinsicBounds


7
api 17 की जरूरत है, इसलिए Drawable.setBounds () बेहतर हो सकता है
user1324936

6
बहुत बहुत धन्यवाद .. यह मेरे लिए काम करता है .. क्या मुझे पता है कि इन दोनों के बीच अंतर क्या है?
एंडजीन

1
@ user1324936 'रिश्तेदार' संस्करण के लिए API 17 की आवश्यकता है, अन्य का उपयोग पिछले संस्करणों के साथ किया जा सकता है
milosmns

11
@ user1324936 setCompoundDrawablesWithIntrinsicBounds एपीआई स्तर 3
ग्रेग

मैं setCompoundDrawableRelativeWithIntrinsicBounds का उपयोग कर रहा था <- यह एक एपीआई 17 पर जोड़ा गया था। इंटेलीजेंस से सावधान रहें।
नियॉन व्रेज

69

इसका उपयोग करें (मैंने परीक्षण किया)। यह अच्छा काम करता है

Drawable image = context.getResources().getDrawable( R.drawable.ic_action );
int h = image.getIntrinsicHeight(); 
int w = image.getIntrinsicWidth();   
image.setBounds( 0, 0, w, h );
button.setCompoundDrawables( image, null, null, null );

1
यह जब लक्षित कर एपीआई 17 से कम, उपयोगी है के बाद से EditText#setCompoundDrawablesWithIntrinsicBoundsकम से कम की आवश्यकता है एपीआई 17.
Krøllebølle

6
क्या आप इसके लिए कोई स्रोत प्रदान कर सकते हैं? मेरे द्वारा देखे गए सभी प्रलेखन यह संकेत देते हैं कि एपीआई 1 के बाद से उपलब्ध है
कुरीफू

48

छवि रिक्त है क्योंकि इसमें निर्दिष्ट सीमाएँ नहीं मिली हैं। आप उपयोग कर सकते हैं, setCompoundDrawables()लेकिन इससे पहले कि आप Drawable.setBounds()विधि का उपयोग करके छवि की सीमा निर्दिष्ट करें


1
सर्वश्रेष्ठ उत्तर क्योंकि आप वास्तव में तर्क देते हैं कि सेटबाउंड क्यों महत्वपूर्ण है।
एंडी

@Andy बिल्कुल, 800 वोटों के साथ इन शीर्ष उत्तरों से घृणा करें, बस एक कोड लाइन को बिना किसी शब्द के
कॉपी कर लें

44

शीर्ष पर सेट उदाहरण:

view.setCompoundDrawablesWithIntrinsicBounds(
    null,
    getResources().getDrawable(R.drawable.some_img),
    null,
    null
);

तर्क आदेश: (बाएं, ऊपर, दाएं, नीचे)


1
बटन के उपयोग से मेरे मामले में यह स्वीकृत उत्तर होना चाहिए। और यह उम्मीद के मुताबिक काम किया !!! यह भी पिछड़े संगतता।
मोचादिवी

22

फिर से थोड़ा सरल:

Drawable image = context.getResources().getDrawable(R.drawable.ic_action );
image.setBounds( 0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight() );
button.setCompoundDrawables( image, null, null, null );

10

यह एपीआई 22 में पदावनत है।

यह कोड मेरे लिए उपयोगी है:

Drawable drawable = ResourcesCompat.getDrawable(getResources(),R.drawable.wen, null);
drawable.setBounds(0, 0, drawable.getMinimumWidth(),
drawable.getMinimumHeight());
tv.setCompoundDrawables(drawable, null, null, null);

3

कोटलिन में:

1) सेट drawable:

val drawable = ContextCompat.getDrawable(context!!,R.drawable.ic_image)?.apply {
    setBounds(0, 0, intrinsicWidth, intrinsicHeight)
}

या

val drawable = ResourcesCompat.getDrawable(resources, R.drawable.ic_image, null)?.apply {
    setBounds(0, 0, minimumWidth, minimumHeight)
}

2) सेट TextView:

textView.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null)

या

button.setCompoundDrawables(null, drawable, null, null)

टेक्स्टव्यू के setCompoundDrawablesWithIntrinsicBoundsलिए काम किया जाएगा ..
आकाश बिसारिया


1

कोटलिन के साथ उदाहरण:

    val myView = layoutInflater.inflate(R.layout.my_view, null) as TextView
    myView.setCompoundDrawablesWithIntrinsicBounds(0, myDrawable, 0, 0)

0

छवि को दिखाया नहीं गया है क्योंकि आपने सीमा निर्दिष्ट नहीं की है, इसलिए आपके पास यहां 2 विकल्प हैं।

पहली विधि

setCompoundDrawablesWithIntrinsicBoundsविधि का उपयोग करें , जैसा कि नीचे दिखाया गया है

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn. setCompoundDrawablesWithIntrinsicBounds(myDrawable, null, null, null);

दूसरी विधि

आप नीचे दिखाए गए अनुसार, TextView पर लागू होने से पहले ड्रा करने योग्य पर सीमाएं लागू कर सकते हैं

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
myDrawable.setBounds( 0, 0, myDrawable.getIntrinsicWidth(), myDrawable.getIntrinsicHeight());
btn.setCompoundDrawables(myDrawable, null, null, null);

बस।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.