मैं LinearLayout के बजाय किसी कंपाउंड ड्रा करने योग्य का उपयोग कैसे करूँ जिसमें एक ImageView और एक TextView शामिल है


198

मेरे कोड के खिलाफ नया लिंट टूल दौड़ा। यह बहुत सारे अच्छे सुझाव लेकर आया था, लेकिन यह मैं नहीं समझ सकता।

इस टैग और इसके बच्चों को एक और एक कंपाउंड ड्रॉबल द्वारा बदला जा सकता है

समस्या: जाँचता है कि क्या कंपाउंड ड्रॉअब का उपयोग करके वर्तमान नोड को टेक्स्ट व्यू से बदला जा सकता है।

एक LinearLayout जिसमें एक ImageView और एक TextView शामिल है, एक यौगिक ड्रॉबल के रूप में अधिक कुशलता से संभाला जा सकता है

और यहाँ मेरा लेआउट है

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_centerInParent="true">

<ImageView 
    android:id="@+id/upImage"
    android:layout_width="20dp"
    android:layout_height="20dp"
    android:layout_gravity="center_vertical"
    android:scaleType="centerInside"
    android:src="@drawable/up_count_big">
</ImageView>

<TextView
    android:id="@+id/LikeCount"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="2dp"
    android:layout_marginBottom="1dp"
    android:textColor="@color/gray"
    android:textSize="16sp"
    android:layout_gravity="center_vertical">
</TextView>
</LinearLayout>

क्या कोई इस बात का ठोस उदाहरण दे सकता है कि इस मामले में एक कंपाउंड को कैसे आकर्षित किया जा सकता है?


4
fwiw कि झूठी सकारात्मकता के कारण मैं सामान्य रूप से अक्षम होने वाले चेक में से एक हूं। सभी TextView/ ImageViewकॉम्बो को इस तरह से नहीं बदला जा सकता है।
रिचर्ड ले मेसियर

@RichardLeMesurier यदि आप छवि का आकार निर्धारित करना चाहते हैं, तो आप कस्टम दृश्य का उपयोग कर सकते हैं। इससे आपका नजरिया हल्का हो जाएगा। मेरा उत्तर देखें: stackoverflow.com/a/31916731/2308720
ऑलेक्ज़ेंडर

@ एलेक्स मैं कई मामलों में सहमत हूं, हालांकि मेरे अनुभव में मैंने अक्सर यह देखने के लिए एक कस्टम दृश्य बनाने की परेशानी के लायक नहीं है कि मैं बग्गी लिंट की जांच को क्या समझता हूं।
रिचर्ड ले मेसियर

जवाबों:


258

TextView 4 कम्पाउंड ड्रॉबल्स के साथ आता है, लेफ्ट, टॉप, राइट और बॉटम में से प्रत्येक के लिए एक।

आपके मामले में, आपको LinearLayoutऔर बिल्कुल भी ज़रूरत नहीं है ImageView। बस android:drawableLeft="@drawable/up_count_big"अपने को जोड़ो TextView

अधिक जानकारी के लिए TextView # setCompoundDrawablesWithIntrinsicBounds देखें ।


34
जरूरी नहीं है, जैसा कि आपके लिंक एक गतिशील छवि के साथ एक उदाहरण दिखाता है। उस स्थिति में यह अभी भी उपयोग करने के लिए आसान या बेहतर हो सकता है ImageView। चेतावनी कहती है कि 'को' से बदला जा सकता है, 'को प्रतिस्थापित नहीं किया जाना चाहिए'
डेविड ओ'मैरा ने

9
लेकिन मैं छवि और पाठ के बीच कुछ स्थान कैसे बना सकता हूं
हितेश धम्शनिया

7
@Hitesh Dhamshaniya, एक्सएमएल या कोड में ड्राएबलपैडिंग प्रॉपर्टी का उपयोग करते हुए।
स्निकोलस

2
मेरे मामले में, मैं एक इनर इमेज व्यू / टेक्स्ट व्यू के साथ एक लिनियरलैट में चला गया क्योंकि Android: drawableLeft ने पर्याप्त नियंत्रण की पेशकश नहीं की - इसलिए, जो आप मूल रूप से मुझे बता रहे हैं कि यह चेतावनी / सुझाव एक झूठ है।
BrainSlugs83

5
यह झूठ नहीं है, कुछ मामलों के लिए एक एकल TextView वास्तव में कुशल हो सकता है। लेकिन सामान्य तौर पर - हां, TextView के साथ ImageView बहुत समृद्ध नियंत्रण प्रदान करता है।
.l

20

यदि किसी कारण से आपको कोड के माध्यम से जोड़ना होगा, तो आप इसका उपयोग कर सकते हैं:

mTextView.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom);

जहां बाएं, ऊपर, दाएं नीचे चित्र हैं


ऊपर एपीआई 17 की आवश्यकता है
पुनी

मुझे ऐसा नहीं लगता, एपीआई 1 के बाद से प्रलेखन राज्यों
जेवियर पी

इस लिंक [प्रलेखन] (देखें developer.android.com/reference/android/widget/... , android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable))
Puni

हाँ , विधि नाम में सापेक्ष पर ध्यान दें ;) मैं इस एक का जवाब नहीं दे रहा हूँ
जेवियर पी

3

इसे जोड़ने के लिए - इस पोस्ट के अनुसार ड्रा करने योग्य की चौड़ाई और ऊंचाई को परिभाषित करना महत्वपूर्ण लगता है:

(उसका कोड काम करता है)


1

आप सामान्य कंपाउंड ड्रॉबल इम्प्लीमेंटेशन का उपयोग कर सकते हैं, लेकिन अगर आपको इस लाइब्रेरी का उपयोग करने योग्य ड्रॉ के आकार को परिभाषित करने की आवश्यकता है:

https://github.com/a-tolstykh/textview-rich-drawable

यहाँ उपयोग का एक छोटा सा उदाहरण है:

<com.tolstykh.textviewrichdrawable.TextViewRichDrawable
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some text"
        app:compoundDrawableHeight="24dp"
        app:compoundDrawableWidth="24dp" />
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.