自定义图文并茂的Button
anroid内置了Button和ImageButton,但是没有提供既能显示图片又能显示文字的button。
这里我自定义了一个ImageTextButton
其中了XML文件中使用了自定义属性custom:icon="@drawable/icon"
下面是ImageTextButton源码:
- import Android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.Canvas;
- import android.util.AttributeSet;
- import android.widget.Button;
- public class ImageTextButton extends Button {
- private final String namespace = "http://www.javaeye.com/custom";
- private int resourceId =0;
- private Bitmap bitmap;
- public ImageTextButton(Context context, AttributeSet attrs) {
- super(context, attrs);
- // TODO Auto-generated constructor stub
- setClickable(true);
- //默认使用R.drawable.icon这张图片
- resourceId = attrs.getAttributeResourceValue(namespace, "icon", R.drawable.icon);
- bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
- }
- @Override
- protected void onDraw(Canvas canvas) {
- // TODO Auto-generated method stub
- //图片顶部居中显示
- int x=(this.getMeasuredWidth()-bitmap.getWidth())>>1;
- int y=0;
- canvas.drawBitmap(bitmap, x, y, null);
- //坐标需要转换,因为默认情况下Button中的文字居中显示
- //这里需要让文字在底部显示
- canvas.translate(0, (this.getMeasuredHeight()>>1)-(int)this.getTextSize());
- super.onDraw(canvas);
- }
- public void setIcon(Bitmap bitmap){
- this.bitmap=bitmap;
- invalidate();
- }
- public void setIcon(int resourceId){
- this.bitmap=BitmapFactory.decodeResource(getResources(), resourceId);
- invalidate();
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:custom="http://www.javaeye.com/custom"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <com.wt.app.ImageTextButton
- android:text="OK"
- custom:icon="@drawable/icon"
- android:id="@+id/button_0"
- android:layout_width="80dip"
- android:layout_height="80dip"
- />
- <com.wt.app.ImageTextButton
- android:text="OK"
- custom:icon="@drawable/icon"
- android:id="@+id/button_1"
- android:layout_width="80dip"
- android:layout_height="100dip"
- android:textSize="30dip"
- android:textColor="#ff0000"
- />
- <com.wt.app.ImageTextButton
- android:text="OK"
- custom:icon="@drawable/icon"
- android:id="@+id/button_2"
- android:layout_width="200dip"
- android:layout_height="200dip"
- android:textSize="30dip"
- />
- </LinearLayout>
浙公网安备 33010602011771号