如何使用复合可绘制对象而不是包含ImageView和TextView的LinearLayout


198

针对我的代码运行新的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
由于误报,这是我通常禁用的检查之一。并非所有TextView/ ImageView连击都可以这种方式替换。
理查德·勒·梅修里尔

@RichardLeMesurier如果要定义图像大小,可以使用自定义视图。这将使您的视图更明亮。看到我的答案:stackoverflow.com/a/31916731/2308720
Oleksandr

@Alex我在很多情况下都同意,但是根据我的经验,创建一个自定义视图来解决我认为是越野车的Lint检查常常不值得麻烦。
理查德·勒·马修里尔

Answers:


258

TextView 带有4个复合画图,左,上,右和下各一个。

就您而言,根本不需要LinearLayoutImageView。只需添加android:drawableLeft="@drawable/up_count_big"到您的TextView

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


34
不一定,因为您的链接显示了带有动态图像的示例。在这种情况下,使用可能仍然更容易或更可取ImageView。警告说“可以替换为”,而不是“应该替换为”
David O'Meara

9
但是我如何在图像和文本之间

7
@Hitesh Dhamshaniya,在XML或代码中使用DrawablePadding属性。
Snicolas 2012年

2
就我而言,我转到带有内部ImageView / TextView的LinearLayout,因为android:drawableLeft没有提供足够的控制-因此,您基本上要告诉我的是,此警告/建议是一个谎言。
BrainSlugs83

5
这不是谎言,在某些情况下,单个TextView确实可以有效。但是总的来说-是的,带有TextView的ImageView提供了更丰富的控制。
2014年

20

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

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

左,上,右下方是Drawables


要求以上API 17
Puni

我不这么认为,文件指出,因为API 1
哈维尔·


是的,请注意方法名称中的Relative;)我在回答中并未提及这一点
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" />
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.