自定义Button(drawableLeft与文本一起居中显示)

很多控件(比如TextView/Button...)可以使用drawableLeft/drawableRight等,但是使用的时候发现文本和图片总是不能一起居中显示,所以下面提供一种解决方案,这里以Button/drawable Left为例:

使用步骤:

  1. 自定义Button
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
/**
 * Created by Administrator on 2017/4/8.
 */

/**
 * drawableRight与文本一起居中显示
 *
 *
 */
class DrawableLeftCenterButton extends android.support.v7.widget.AppCompatButton {

    public DrawableLeftCenterButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas = getTopCanvas(canvas);
        super.onDraw(canvas);
    }

    private Canvas getTopCanvas(Canvas canvas) {
        Drawable[] drawables = getCompoundDrawables();
        if (drawables == null) {
            return canvas;
        }
        Drawable drawable = drawables[0];// 左面的drawable
        if (drawable == null) {
            drawable = drawables[2];// 右面的drawable
        }

        // float textSize = getPaint().getTextSize(); // 使用这个会导致文字竖向排下来
        float textSize = getPaint().measureText(getText().toString());
        int drawWidth = drawable.getIntrinsicWidth();
        int drawPadding = getCompoundDrawablePadding();
        float contentWidth = textSize + drawWidth + drawPadding;
        int leftPadding = (int) (getWidth() - contentWidth);
        setPadding(0, 0, leftPadding, 0); // 直接贴到左边
        float dx = (getWidth() - contentWidth) / 2;
        canvas.translate(dx, 0);// 往右移动
        return canvas;
    }
}
  1. 在布局文件中使用:
    和普通button一样使用
<com.view.DrawableLeftCenterButton
                   android:id="@+id/btu_control_order"
                   android:layout_width="0dp"
                   android:layout_height="@dimen/x86"
                   android:layout_weight="1"
                   android:background="@drawable/btu_shape"
                   android:drawableLeft="@mipmap/control_icon"
                   android:includeFontPadding="false"
                   android:text="@string/control" />
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Correctness AdapterViewChildren Summary: AdapterViews can...
    MarcusMa阅读 9,112评论 0 6
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 180,289评论 25 708
  • 九月的长安,一片金黄。落叶如同飞舞的蝴蝶,追随着匆匆过往的行客。苏墨倚靠在一棵梧桐树后,双目紧闭,脸色煞白,身下的...
    霜染公子阅读 697评论 0 1
  • 对于“写作”的认知源于小学三年级,方格纸、圆珠笔以及透明胶,以“我”的视角展开一段叙事描写。 从那时起开始人生的写...
    斯皮达洲阅读 269评论 1 1
  • 雨天,难得的休憩,正好梳理下这段时间的空闲。工作,已陆续开展,新旧交替,悲喜交加,生活终究还是来了。夜晚很...
    盼望青丝不白发阅读 323评论 0 1

友情链接更多精彩内容