EditTextView 提示带图标

本文介绍如何在Android中实现EditTextView的提示文本带有图标的功能。内容涉及到图标与文字的对齐问题,以及光标位置调整,通过计算并填充空格来确保提示文字与图标正确对齐。

未输入

已经输入

code   未完善(文字图标未 对齐  光标在图标左边 提示文字右边 通过空格实现(需计算距离 填充hint的空格)) xml请填充 

drawableLeft 标签
package com.rkt.thirddemo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.Log;

public class MyEditView extends androidx.appcompat.widget.AppCompatEditText {


    private   Drawable leftDrawable;
    private int leftWidth;
    private int compoundPaddingTop;
    private int compoundPaddingLeft;

    private  boolean drawLeft=true;
    private  float textPx=0;

    public MyEditView(Context context) {
        super(context);
        init();
    }

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

    public MyEditView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init (){
         leftDrawable =getCompoundDrawables()[0];
         leftWidth = leftDrawable.getIntrinsicWidth();
         compoundPaddingTop = getCompoundPaddingTop();
         compoundPaddingLeft = getCompoundPaddingLeft();
         setCompoundDrawables(null,null,null,null);

         addTextChangedListener(new TextWatcher() {
             @Override
             public void beforeTextChanged(CharSequence s, int start, int count, int after) {

             }

             @Override
             public void onTextChanged(CharSequence s, int start, int before, int count) {
                 if(s.length()==0){
                     drawLeft=true;
                 }else {
                     drawLeft=false;
                 }
             }

             @Override
             public void afterTextChanged(Editable s) {

             }
         });
    }


    public static int dip2px(Context context, float dpValue) {
        final float scale =context.getResources().getDisplayMetrics().density;
        return(int) (dpValue * scale + 0.5f);
    }


    @Override
    protected void onDraw(Canvas canvas) {
        int x=getScrollX() + getPaddingLeft();
        int y=getScrollY() + getPaddingTop();
        if(leftDrawable!=null && drawLeft){
            canvas.save();
            canvas.translate( x, y);
            leftDrawable.draw(canvas);
            canvas.restore();
        }
        canvas.translate(0, (leftWidth-textPx)/2-y);
        super.onDraw(canvas);
    }

}
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值