web-dev-qa-db-ja.com

ImageViewとTextViewを含むLinearLayoutの代わりに複合ドロウアブルを使用する方法

私のコードに対して新しい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>

この場合、誰かが化合物を描画可能にする具体的な例を提供できますか?

185
Leo

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

あなたの場合、LinearLayoutImageViewはまったく必要ありません。 TextViewAndroid:drawableLeft="@drawable/up_count_big"を追加するだけです。

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

247
chiuki

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

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

左、上、右下はDrawableです

19
Javier P

これに追加するには、この投稿に従ってドロアブルの幅と高さを定義することが重要と思われます。

(彼のコードは動作します)

3

一般的な複合ドロウアブル実装を使用できますが、ドロウアブルのサイズを定義する必要がある場合は、このライブラリを使用します。

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" />
1
Oleksandr