我怎么能将drawableLeft图标对齐到顶部

时间:2015-02-03 13:41:59

标签: android textview

现在我需要像html标签一样实现一个函数,请参见下面的图片:

the currect showing

首先,我设置drawableLeft,它显示如下:

the unclect showing

这不是我的假设。之后我创建了一个类' LiTextView'实现TextView,并覆盖onDraw()方法,如下所示:

@Override
protected void onDraw(Canvas canvas) {
    Drawable[] drawables = getCompoundDrawables();
    if (drawables != null) {
        Drawable drawableLeft = drawables[0];
        if (drawableLeft != null) {
            canvas.save();
            canvas.translate(10, 50);
            drawableLeft.draw(canvas);
            canvas.restore();
        }
    }
    super.onDraw(canvas);
}
像这样的xml文件:

<me.naiyu.android.textviewlidemo.widget.LiTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:drawableLeft="@drawable/circle_dot"
        android:drawablePadding="10dp"
        android:textColor="#000000"
        android:textSize="18sp"
        android:text="Displays text to the user and optionally allows them to edit it. A TextView is a complete text editor, however the basic class is configured to not allow editing"/>

它变成了这个(有两个圆圈):

enter image description here

我如何实现图片,我现在没有想法!

1 个答案:

答案 0 :(得分:0)

两次绘制“点”的原因是因为你打电话给super.onDraw(canvas)。你自己在顶部位置画了点,然后你让系统通过调用super来绘制原始位置上的点。

不幸的是, 要调用super.onDraw(canvas)来绘制文字。实现所需目标的更好方法是创建一个包装要显示的Drawable的自定义Drawable,然后覆盖自定义Drawable的draw(Canvas)方法。

有关示例,请参阅my answer here。唯一的缺点是你必须从代码中设置drawableLeft,而不是XML。