自定义控件使用DrawableLeft/Right图片和文字同时居中

本文介绍如何在Android中创建自定义控件,使得DrawableLeft和DrawableRight与文字在同一行内居中对齐。通过自定义布局和设置View的属性,可以实现这种效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

</pre><pre name="code" class="html"> <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <com.mypackage.drawbleandtext.center.DrawableLeftCenterTextView
                android:id="@+id/drawable_left"
                android:layout_width="0dp"
                android:layout_height="40dp"
                android:layout_weight="1"
                android:drawableLeft="@drawable/tab_focus"
                android:gravity="center_vertical"
                android:text="资料"
                android:textColor="#000000"
                android:textSize="18sp" />

            <com.mypackage.drawbleandtext.center.DrawableLeftCenterTextView
                android:id="@+id/drawable_right"
                android:layout_width="0dp"
                android:layout_height="40dp"
                android:layout_weight="1"
                android:drawableLeft="@drawable/tab_news"
                android:gravity="center_vertical"
                android:text="设置"
                android:textColor="#000000" />

            <com.mypackage.drawbleandtext.center.DrawableRightCenterTextView
                android:id="@+id/drawable_right1"
                android:layout_width="0dp"
                android:layout_height="40dp"
                android:layout_weight="1"
                android:drawableRight="@drawable/tab_pics"
                android:gravity="center_vertical"
                android:text="主页"
                android:textColor="#000000" />
        </LinearLayout>


代码一:

/**
 * 自定义控件,使用drawableLeft与text水平居中显示
 */
public class DrawableLeftCenterTextView extends TextView {

	public DrawableLeftCenterTextView(Context context) {
		super(context);
	}

	public DrawableLeftCenterTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}
	
	public DrawableLeftCenterTextView(Context context, AttributeSet attrs,
			int defStyle) {
		super(context, attrs, defStyle);
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		Drawable[] drawables = getCompoundDrawables();
		if(drawables != null){
			Drawable drawableLeft = drawables[0];
			if(drawableLeft != null){
				float textWidth = getPaint().measureText(getText().toString());
				int drawablePadding = getCompoundDrawablePadding();
				int drawableWidth = 0;
				drawableWidth = drawableLeft.getIntrinsicWidth();
				float bodyWidth = textWidth + drawableWidth + drawablePadding;
				canvas.translate((getWidth() - bodyWidth) / 2, 0);
			}
		}
		super.onDraw(canvas);
	}
	

}


代码二:

/**
 * 自定义控件,使用drawableRight与text水平居中显示
 */
public class DrawableRightCenterTextView extends TextView {

	public DrawableRightCenterTextView(Context context) {
		super(context);
	}

	public DrawableRightCenterTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}
	
	public DrawableRightCenterTextView(Context context, AttributeSet attrs,
			int defStyle) {
		super(context, attrs, defStyle);
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		Drawable[] drawables = getCompoundDrawables();//left,top,right,bottom
		if(drawables != null){
			Drawable drawableRight = drawables[2];
			if(drawableRight != null){
				float textWidth = getPaint().measureText(getText().toString());
				int drawablePadding = getCompoundDrawablePadding();
				int drawableWidth = 0;
				drawableWidth = drawableRight.getIntrinsicWidth();
				float bodyWidth = textWidth + drawableWidth + drawablePadding;
				setPadding(0, 0, (int)(getWidth() - bodyWidth), 0);
				canvas.translate((getWidth() - bodyWidth) / 2, 0);
			}
		}
		super.onDraw(canvas);
	}
	

}

                                                                     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值