ImageViewとTextViewを含むLinearLayoutの代わりに複合ドローアブルを使用するにはどうすればよいですか


198

新しいLintツールをコードに対して実行しました。良い提案がたくさん出てきましたが、これはわかりません。

このタグとその子は、1つの複合ドローアブルで置き換えることができます

問題:複合ドローアブルを使用して、現在のノードをTextViewで置き換えることができるかどうかを確認します。

ImageViewとTextViewを含むLinearLayoutは、複合ドローアブルとしてより効率的に処理できます。

そして、これが私のレイアウトです

<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は、誤検知のため、通常は無効にするチェックの1つです。すべてのTextView/ ImageViewコンボをこの方法で交換できるわけではありません。
Richard Le Mesurier、2014

@RichardLeMesurier画像のサイズを定義する場合は、カスタムビューを使用できます。これにより、ビューが明るくなります。私の回答を参照してください:stackoverflow.com/a/31916731/2308720
Oleksandr

@Alex私は多くの場合同意しますが、私の経験では、カスタムビューを作成してバグのあるリントチェックと見なすものを回避するのに苦労することはあまりありません。
Richard Le Mesurier、2015

回答:


258

TextView には、左、上、右、下のそれぞれに1つずつ、4つの複合ドローアブルが付属しています。

あなたのケースでは、あなたは必要としないLinearLayoutImageView、すべての。に追加android:drawableLeft="@drawable/up_count_big"するだけTextViewです。

詳細については、TextView#setCompoundDrawablesWithIntrinsicBoundsを参照してください。


34
リンクは動的な画像の例を示しているため、必ずしもそうとは限りません。その場合でも、を使用する方が簡単または好ましい場合がありImageViewます。警告は「置き換えられるべきである」ではなく「置き換えられる」ことを示しています
David O'Meara

9
しかし、どうすれば画像とテキストの間にスペースを空けることができますか
Hitesh Dhamshaniya '26

7
@Hitesh Dhamshaniya、XMLまたはコードでDrawablePaddingプロパティを使用。
Snicolas

2
私の場合、android:drawableLeftは十分な制御を提供しなかったため、ImageView / TextViewが内部にあるLinearLayoutに移動しました。つまり、基本的に私が言っているのは、この警告/提案は嘘であるということです。
BrainSlugs83 2013

5
これは嘘ではありません。場合によっては、単一のTextViewが実際に効率的である可能性があります。しかし、一般的には-はい、TextViewを備えたImageViewは、より豊富なコントロールを提供します。
ılǝ

20

何らかの理由でコードを介して追加する必要がある場合は、これを使用できます。

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

ここで、左、上、右下はドローアブルです


上記のAPI 17が必要
Puni

私はそうは思わない、API 1以降のドキュメントによると
ハビエルP


ええ、メソッド名の相対に注意してください;)私は答えでこれを参照していません
Javier P


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" />
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.