我怎样才能将 drawableLeft 图标对齐到顶部
How could I align the drawableLeft icon to the top
现在我需要实现一个类似html标签的功能,见下图:
首先,我设置了drawableLeft
,它显示如下:
这不是我想做的。之后,我创建了一个 class '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"/>
变成了这个(有两个圈):
图一怎么实现,我现在都不知道!
之所以"dot"画了两次,是因为你调用了super.onDraw(canvas)
。你自己在top位置画了点,然后调用super让系统在原来的位置画点。
不幸的是,您必须调用super.onDraw(canvas)
才能绘制文本。实现您想要的效果的更好方法是创建一个自定义 Drawable
来包装您要显示的 Drawable,然后覆盖自定义 Drawable 的 draw(Canvas)
方法。
有关示例,请参阅 my answer here。唯一的缺点是您必须从代码中设置 drawableLeft
,而不是 XML。
现在我需要实现一个类似html标签的功能,见下图:
首先,我设置了drawableLeft
,它显示如下:
这不是我想做的。之后,我创建了一个 class '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"/>
变成了这个(有两个圈):
图一怎么实现,我现在都不知道!
之所以"dot"画了两次,是因为你调用了super.onDraw(canvas)
。你自己在top位置画了点,然后调用super让系统在原来的位置画点。
不幸的是,您必须调用super.onDraw(canvas)
才能绘制文本。实现您想要的效果的更好方法是创建一个自定义 Drawable
来包装您要显示的 Drawable,然后覆盖自定义 Drawable 的 draw(Canvas)
方法。
有关示例,请参阅 my answer here。唯一的缺点是您必须从代码中设置 drawableLeft
,而不是 XML。