ImageView ve TextView içeren bir LinearLayout yerine çizilebilir bir bileşik nasıl kullanılır


198

Yeni Lint aracını koduma karşı çalıştırdım. Çok iyi öneriler geldi, ama bunu anlayamıyorum.

Bu etiket ve çocukları, bir ve bir çekilebilir bileşik ile değiştirilebilir

Sorun: Geçerli düğümün bileşik çekilebilirler kullanılarak bir TextView ile değiştirilip değiştirilemeyeceğini denetler.

ImageView ve TextView içeren bir LinearLayout, bileşik çekilebilir olarak daha verimli bir şekilde kullanılabilir

Ve işte benim düzenim

<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>

Birisi bu durumda bir bileşiğin nasıl çekilebilir hale getirileceğine dair somut bir örnek verebilir mi?


4
fwiw, yanlış pozitifler nedeniyle normalde devre dışı bıraktığım kontrollerden biri. Tüm TextView/ ImageViewkombinasyonları bu şekilde değiştirilemez.
Richard Le Mesurier

@RichardLeMesurier Bir görüntü boyutu tanımlamak istiyorsanız özel görünümü kullanabilirsiniz. Bu, görüşünüzü daha açık hale getirecektir. Cevabımı gör: stackoverflow.com/a/31916731/2308720
Oleksandr

@Alex birçok durumda katılıyorum, ancak tecrübelerime göre, buggy Lint kontrolü olarak düşündüğüm şeyi almak için özel bir görünüm oluşturma zahmetine değmezim.
Richard Le Mesurier

Yanıtlar:


259

TextView sol, üst, sağ ve alt kısımların her biri için bir tane olmak üzere 4 bileşik çekilebilir ürünle birlikte gelir.

Sizin durumunuzda, LinearLayoutve hiç ihtiyacınız yoktur ImageView. Sadece eklemek android:drawableLeft="@drawable/up_count_big"adresinden Müşteri TextView.

Daha fazla bilgi için TextView # setCompoundDrawablesWithIntrinsicBounds sayfasına bakın .


35
bağlantınız dinamik bir resme sahip bir örnek gösterdiğinden, mutlaka değil. Bu durumda, yine de bir ImageView. Uyarı, 'değiştirilebilir' ile değil 'ile değiştirilmelidir' diyor
David O'Meara

9
ama Resim ve Metin arasında nasıl yer açabilirim
Hitesh Dhamshaniya

7
@Hitesh Dhamshaniya, XML veya kodda DrawablePadding özelliğini kullanma.
Snicolas

2
Benim durumumda, iç ImageView / TextView ile bir LinearLayout'a geçtim çünkü android: drawableLeft yeterli kontrol sunmadı - bu yüzden temelde bana söylediğiniz şey bu uyarı / önerinin bir yalan olduğu.
BrainSlugs83

5
Bu bir yalan değil, bazı durumlarda tek bir TextView gerçekten etkili olabilir. Ancak genel olarak - evet, TextView ile ImageView çok daha zengin kontrol sağlar.
14'te

20

herhangi bir nedenle kod yoluyla eklemeniz gerekiyorsa, bunu kullanabilirsiniz:

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

sol, üst, sağ alt Çizilebilir


Yukarıdaki API 17'yi zorunlu kılın
Puni

Ben öyle düşünmüyorum, API 1'den beri belgeler
Javier P

Bu bağlantıya bakın [belgeler] ( geliştirici.android.com/
reference/android/widget/…

evet yöntem adında Göreli not ;) Ben cevap bu bir atıfta değil
Javier P


1

Genel bileşik çekilebilir uygulamasını kullanabilirsiniz, ancak çekilebilir bir boyut tanımlamanız gerekiyorsa bu kütüphaneyi kullanın:

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

İşte küçük bir kullanım örneği:

<com.tolstykh.textviewrichdrawable.TextViewRichDrawable
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some text"
        app:compoundDrawableHeight="24dp"
        app:compoundDrawableWidth="24dp" />
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.