如何使用复合drawable而不是包含ImageView和TextView的LinearLayout

时间:2011-11-29 22:39:04

标签: android android-layout android-linearlayout textview compound-drawables

针对我的代码运行新的Lint工具。它提出了许多好的建议,但这个我无法理解。

  

此标签及其子代可以替换为一个复合可绘制

     

问题:检查当前节点是否可以使用复合drawables替换为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 个答案:

答案 0 :(得分:247)

TextView附带4个复合绘图,左,上,右,下各一个。

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

即可

有关详细信息,请参阅TextView#setCompoundDrawablesWithIntrinsicBounds

答案 1 :(得分:19)

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

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

左侧,上方,右下方是Drawables

答案 2 :(得分:3)

除此之外 - 定义宽度和宽度似乎很重要。根据这篇文章的可绘制高度:

(他的代码有效)

答案 3 :(得分:1)

您可以使用常规复合drawable实现,但如果您需要定义drawable的大小,请使用此库:

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