自定义控件让EditText的drawableLeft与文本一起居中显示

来源:互联网 发布:淘宝退款和退货区别 编辑:程序博客网 时间:2024/06/05 02:41

如上图  项目中要求的显示效果是serch图片和EditText的文本一起在中间位置。

尝试设置了很多EditText均不能实现满意的效果,其中:

android:drawableLeft=""
android:drawableRight=""
设置的位置均在两边,不能满足需求。
在此推荐一个方法,用自定义的EditText,如下:
public class MyEditText extends EditText {    public MyEditText(Context context) {        super(context);    }    public MyEditText(Context context, AttributeSet attrs) {        super(context, attrs);    }    public MyEditText(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)    public MyEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {        super(context, attrs, defStyleAttr, defStyleRes);    }    @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) / 5, 0);            }        }        super.onDraw(canvas);    }
代码中黄色部分中的数字“5”,可控制图片的位置,此时再设置
drawableLeft即可达到如图效果。另外TextView也可以用此方法实现类似效果


阅读全文
0 0
原创粉丝点击