क्रमिक रूप से एक TextView में बाईं ओर खींचने योग्य सेट करें


285

मैं यहाँ xml में एक textView है।

<TextView
        android:id="@+id/bookTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:drawableLeft="@drawable/checkmark"
        android:gravity="center_vertical"
        android:textStyle="bold"
        android:textSize="24dip"
        android:maxLines="1"
        android:ellipsize="end"/>

जैसा कि आप देख सकते हैं कि मैंने xml में DrawableLeft सेट किया है।

मैं कोड में दराज को बदलना चाहूंगा।

वहाँ वैसे भी यह करने के बारे में जाने के लिए है? या पाठ दृश्य के लिए कोड में drawableLeft की स्थापना?

जवाबों:


781

आप setCompoundDrawablesWithIntrinsicBounds का उपयोग कर सकते हैं (इंट लेफ्ट, इंट टॉप, इंट राइट, इंट बॉटम)

सेट 0 जहाँ आप चित्र नहीं चाहते हैं

बाईं ओर खींचने योग्य उदाहरण:

TextView textView = (TextView) findViewById(R.id.myTxtView);
textView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon, 0, 0, 0);

युक्ति: जब भी आप किसी XML विशेषता को जानते हैं, लेकिन रनटाइम पर इसका उपयोग करने के बारे में कोई सुराग नहीं है। बस डेवलपर डॉक में उस संपत्ति के विवरण पर जाएं। यदि आप रनटाइम पर समर्थित हैं, तो आपको संबंधित तरीके मिलेंगे । यानी के लिए DrawableLeft


तो मैं इस विधि में कहां से आकर्षित कर सकता हूं?
coder_For_Life22

1
+1 यह एंड्रॉइड सेट करने के लिए काम कर रहा है: पाठ दृश्य के लिए ड्राटेबल प्रोग्राम।
थैंक्स

35
टिप जोड़ने के लिए +1। डॉक्स का उपयोग करते समय सबसे पहली बात
देवों

@BrainCrash आप सही हैं, मैंने इसे नए तरीके के साथ गलत किया है जिसका नाम समान है।
डिएथेमेटर 12

2
नमस्कार मैं इस पद्धति का उपयोग ड्रॉबल्स को सेट करने के लिए कर रहा था, लेकिन मुझे इसका गेट्टर काउंटर भाग नहीं मिला। मुझे जांचना होगा कि क्या कंपाउंड टेक्स्टव्यू में कुछ ड्रॉबल है। मैं उसको कैसे करू? की तुलना textview.getCompoundDrawablesRelative()[0]करने की कोशिश कीmContext.getResources().getDrawable(R.drawable.my_drawable)
रवि


6

आप TextView पर ड्रॉबल सेट करने के लिए निम्नलिखित में से किसी भी तरीके का उपयोग कर सकते हैं:

1 - setCompoundDrawablesWithIntrinsicBounds (int, int, int, int)

2- setCompoundDrawables (Left_Drawable, Top_Drawable, Right_Drawable, Bottom_Drawable)

और आपके द्वारा उपयोग किए जा सकने वाले संसाधनों से प्राप्त करने योग्य होने के लिए:

getResources().getDrawable(R.drawable.your_drawable_id);

नहीं, setCompoundDrawablesWithIntrinsicBounds (int, int, int, int) आपके स्वयं के लिंक से API Levet 3 है ...
ब्रेनक्रैश

1

कोटलिन का उपयोग करना:

आप एक एक्सटेंशन फ़ंक्शन बना सकते हैं या setCompoundDrawablesWithIntrinsicBoundsसीधे उपयोग कर सकते हैं।

fun TextView.leftDrawable(@DrawableRes id: Int = 0) {
   this.setCompoundDrawablesWithIntrinsicBounds(id, 0, 0, 0)
}

यदि आपको ड्रा करने योग्य आकार बदलने की आवश्यकता है, तो आप इस एक्सटेंशन फ़ंक्शन का उपयोग कर सकते हैं।

textView.leftDrawable(R.drawable.my_icon, R.dimen.icon_size)

fun TextView.leftDrawable(@DrawableRes id: Int = 0, @DimenRes sizeRes: Int) {
    val drawable = ContextCompat.getDrawable(context, id)
    val size = resources.getDimensionPixelSize(sizeRes)
    drawable?.setBounds(0, 0, size, size)
    this.setCompoundDrawables(drawable, null, null, null)
}

वास्तव में फैंसी पाने के लिए, एक रैपर बनाएं जो आकार और / या रंग संशोधन की अनुमति देता है।

textView.leftDrawable(R.drawable.my_icon, colorRes = R.color.white)

fun TextView.leftDrawable(@DrawableRes id: Int = 0, @DimenRes sizeRes: Int = 0, @ColorInt color: Int = 0, @ColorRes colorRes: Int = 0) {
    val drawable = drawable(id)
    if (sizeRes != 0) {
        val size = resources.getDimensionPixelSize(sizeRes)
        drawable?.setBounds(0, 0, size, size)
    }
    if (color != 0) {
        drawable?.setColorFilter(color, PorterDuff.Mode.SRC_ATOP)
    } else if (colorRes != 0) {
        val colorInt = ContextCompat.getColor(context, colorRes)
        drawable?.setColorFilter(colorInt, PorterDuff.Mode.SRC_ATOP)
    }
    this.setCompoundDrawables(drawable, null, null, null)
}

0

एक कोटलिन विस्तार + ड्रॉबल के आसपास कुछ पैडिंग

fun TextView.addDrawable(drawable: Int) {
val imgDrawable = ContextCompat.getDrawable(context, drawable)
compoundDrawablePadding = 32
setCompoundDrawablesWithIntrinsicBounds(imgDrawable, null, null, null)
}

0

इसे करने के दो तरीके हैं या तो आप इसके लिए XML या Java का उपयोग कर सकते हैं। यदि यह स्थिर है और इसमें कोई बदलाव की आवश्यकता नहीं है, तो आप XML में आरंभ कर सकते हैं।

  android:drawableLeft="@drawable/cloud_up"
    android:drawablePadding="5sp"

अब यदि आपको आइकनों को गतिशील रूप से बदलने की आवश्यकता है तो आप ईवेंट के आधार पर आइकन को कॉल करके कर सकते हैं

       textViewContext.setText("File Uploaded");
textViewContext.setCompoundDrawablesWithIntrinsicBounds(R.drawable.uploaded, 0, 0, 0);

-8
static private Drawable **scaleDrawable**(Drawable drawable, int width, int height) {

    int wi = drawable.getIntrinsicWidth();
    int hi = drawable.getIntrinsicHeight();
    int dimDiff = Math.abs(wi - width) - Math.abs(hi - height);
    float scale = (dimDiff > 0) ? width / (float)wi : height /
            (float)hi;
    Rect bounds = new Rect(0, 0, (int)(scale * wi), (int)(scale * hi));
    drawable.setBounds(bounds);
    return drawable;
}

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