Android如何设置drawableLeft的大小
问题背景
在Android开发中,我们经常需要在TextView或Button等控件中设置一个图标,并且希望能够控制图标的大小、颜色等属性。其中,drawableLeft
用于在文本左侧设置一个图标,但默认情况下,它的大小是根据图标的原始尺寸来显示的。如果我们想改变drawableLeft
的大小,该怎么办呢?
解决方案
要解决这个问题,我们可以通过以下几种方式来设置drawableLeft
的大小:
1. 使用TextView
的setCompoundDrawables()
方法
我们可以通过TextView
的setCompoundDrawables()
方法来设置drawableLeft
的大小。具体步骤如下:
首先,在XML布局文件中定义一个TextView
控件,并设置drawableLeft
属性。
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/icon"
android:text="Hello World!" />
然后,在Java代码中获取该TextView
控件,并调用setCompoundDrawables()
方法来设置drawableLeft
的大小。
TextView textView = findViewById(R.id.textView);
Drawable drawable = getResources().getDrawable(R.drawable.icon);
drawable.setBounds(0, 0, 50, 50); // 设置图标的宽高
textView.setCompoundDrawables(drawable, null, null, null); // 设置drawableLeft
通过调用drawable.setBounds()
方法,我们可以设置图标的宽度和高度。在上述代码中,我们将图标的宽高设置为50。
2. 使用TextView
的DrawablePadding
属性
除了上述方法,我们还可以通过TextView
的DrawablePadding
属性来设置drawableLeft
的大小。具体步骤如下:
首先,在XML布局文件中定义一个TextView
控件,并设置drawableLeft
和drawablePadding
属性。
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/icon"
android:drawablePadding="10dp"
android:text="Hello World!" />
在上述代码中,通过设置drawablePadding
属性,我们可以调整drawableLeft
的大小。这里我们将drawablePadding
设置为10dp,表示在图标左侧添加10dp的间距。
3. 自定义TextView
控件
如果我们在多个地方需要设置drawableLeft
的大小,可以考虑自定义一个TextView
控件,通过重写onDraw()
方法来实现。
首先,创建一个MyTextView
类,并继承自TextView
。
public class MyTextView extends TextView {
private Drawable drawableLeft;
public MyTextView(Context context) {
super(context);
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
// 绘制drawableLeft
if (drawableLeft != null) {
int drawableWidth = drawableLeft.getIntrinsicWidth();
int drawableHeight = drawableLeft.getIntrinsicHeight();
int left = (getWidth() - drawableWidth) / 2; // 计算图标左侧坐标
int top = (getHeight() - drawableHeight) / 2; // 计算图标上方坐标
drawableLeft.setBounds(left, top, left + drawableWidth, top + drawableHeight);
drawableLeft.draw(canvas);
}
// 绘制文本
super.onDraw(canvas);
}
@Override
public void setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom) {
drawableLeft = left; // 保存drawableLeft
super.setCompoundDrawables(left, top, right, bottom);
}
}
在上述代码中,我们重写了onDraw()
方法,在绘制文本之前,绘制了drawableLeft
。我们通过计算图标的左上角坐标,来实现对drawableLeft
的大小控制。同时,我们通过setCompoundDrawables()
方法将drawableLeft
保存起来。
然后,在XML布局文件中使用MyTextView
控件。
<com.example.MyTextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"