How do I use a compound drawable instead of a LinearLayout that contains an ImageView and a TextView

ε祈祈猫儿з 提交于 2019-11-26 04:07:40

问题


Ran the new Lint tool against my code. It came up with a lot of good suggestions, but this one I cannot understand.

This tag and its children can be replaced by one and a compound drawable

Issue: Checks whether the current node can be replaced by a TextView using compound drawables.

A LinearLayout which contains an ImageView and a TextView can be more efficiently handled as a compound drawable

And here is my layout

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

Can someone provide a concrete example of how to make a compound drawable in this case?


回答1:


TextView comes with 4 compound drawables, one for each of left, top, right and bottom.

In your case, you do not need the LinearLayout and ImageView at all. Just add android:drawableLeft="@drawable/up_count_big" to your TextView.

See TextView#setCompoundDrawablesWithIntrinsicBounds for more info.




回答2:


if for some reason you need to add via code, you can use this:

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

where left, top, right bottom are Drawables




回答3:


To add to this - it seems important to define the width & height of the drawable as per this post:

  • Drawable shape not showing when used in combination with android:drawableBottom attribute.

(his code works)




回答4:


You can use general compound drawable implementation, but if you need to define a size of drawable use this library:

https://github.com/a-tolstykh/textview-rich-drawable

Here is a small example of usage:

<com.tolstykh.textviewrichdrawable.TextViewRichDrawable
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some text"
        app:compoundDrawableHeight="24dp"
        app:compoundDrawableWidth="24dp" />


来源:https://stackoverflow.com/questions/8318765/how-do-i-use-a-compound-drawable-instead-of-a-linearlayout-that-contains-an-imag

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!