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

</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);
	}
	

}

                                                                     

你可能感兴趣的:(自定义控件使用DrawableLeft/Right图片和文字同时居中)