如何使用复合drawable来代替包含ImageView和TextView的LinearLayout

对我的代码运行新的Lint工具。 它提出了很多很好的build议,但是这个我不明白。

这个标签和它的孩子可以用一个和一个复合可绘制来replace

问题:检查当前节点是否可以由使用复合绘图的TextViewreplace。

包含ImageView和TextView的LinearLayout可以更有效地作为复合drawable进行处理

这是我的布局

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

有人可以提供一个具体的例子来说明如何在这种情况下制作一个复合绘制?

TextView带有4个复合可绘图,左,右,右各一个。

在你的情况下,你根本不需要LinearLayoutImageView 。 只需将android:drawableLeft="@drawable/up_count_big"TextView

有关更多信息,请参阅TextView#setCompoundDrawablesWithIntrinsicBounds 。

如果由于某种原因你需要通过代码添加,你可以使用这个:

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

左,上,右下都是Drawables

添加到这个 – 根据这个post定义drawable的宽度和高度似乎很重要:

  • 与android:drawableBottom属性结合使用时,不会显示可绘制的形状。

(他的代码工程)

您可以使用通用复合绘制实现,但是如果您需要定义可绘制的大小,请使用此库:

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" /> 
Interesting Posts