自定义控件:左侧有文字,右侧有文字的EditText

自定义控件:左侧有文字,右侧有文字的EditText

控件功能详解:

  • 左侧文字一般为固定内容,文字大小默认16sp
  • 与输入内容的间距为设置的leftTextPadding ,默认为26dp(字体默认source_han_sans_cn_regular.otf")
  • 右侧文字 一般显示单位等,(字体默认roboto_medium.ttf),文字大小默认14sp
  • 没有输入内容时,右侧文字距光标0dp,输入内容时,间距为设置的rightTextPadding,默认为8dp
  • 底部下划线,焦点状态改变时,下划线颜色改变(downLineDefaultColor:没有焦点时的颜色,默认颜色为:#F5F5F5。downLineFocusColor:有焦点时的颜色,默认颜色为:#70A4EC)
  • 同时又暴露出去左侧文字的点击事件方法,如果添加右侧图片,也有暴露的右侧图片的点击事件方法
    效果图如下:
    蓝色为获取焦点时的颜色,其他的为失去焦点时的颜色在这里插入图片描述
    OK,效果图就是这样,话不多说,上代码
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.support.v7.widget.AppCompatEditText;
import android.text.Editable;
import android.text.InputType;
import android.text.TextPaint;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.inputmethod.InputMethodManager;

import com.minimaxhk.cmis.R;

import java.util.ArrayList;
import java.util.List;

public class LeftTextEditText extends AppCompatEditText/* implements TextWatcher */ {
   
    private Context      context;
    /**
     * 左侧文字
     */
    private String       leftText              = "";
    /**
     * 右侧文字
     */
    private String       rightText             = "";
    /**
     * 左侧文字的大小
     */
    private float        LeftTextSize          = -1;
    /**
     * 右侧文字的大小
     */
    private float        rightTextSize         = -1;
    /**
     * 左侧文字的颜色
     */
    private int          leftTextColor;
    /**
     * 右侧文字的颜色
     */
    private int          rightTextColor;
    /**
     * 左侧文字的字体
     */
    private int          leftTextFont;
    /**
     * 右侧文字的字体
     */
    private int          rightTextFont;
    /**
     * 底部线的默认颜色
     */
    private int          downLineDefaultColor;
    /**
     * 底部线获取焦点颜色
     */
    private int          downLineFocusColor;
    /**
     * 左侧文字的画笔
     */
    private Paint        leftPaint;
    /**
     * 右侧文字的画笔
     */
    private Paint        rightPaint;
    /**
     * 输入文字的画笔
     */
    private TextPaint    paint;
    /**
     * 底部线的画笔
     */
    private Paint        downLinePaint;
    /**
     * 光标距左侧文字的距离
     */
    private float        leftTextPadding;
    /**
     * 光标距右侧文字的距离
     */
    private float        rightTextPadding;
    /**
     * 存放字体路径
     */
    private List<String> pathList;
    /**
     * 点击的是否是左侧文字
     */
    private Boolean      isSelectLeftText      = false;
    /**
     * 点击的是否是右侧图片
     */
    private Boolean      isSelectRightDrawIcon = false;

    public LeftTextEditText(Context context) {
   
        this(context, null);
    }

    public LeftTextEditText(Context context, AttributeSet attrs) {
   
        this(context, attrs, R.attr.editTextStyle);
        this.context = context;
    }

    public LeftTextEditText(Context context, AttributeSet attrs, int defStyleAttr) {
   
        super(context, attrs, defStyleAttr);
        this.context = context;
        init(context, attrs, defStyleAttr);
    }

    private void init(Context context, AttributeSet attrs, int defStyleAttr) {
   
        paint = getPaint();
        pathList = new ArrayList<>();//默认添加的几个字体样式
        pathList.add(0, "fonts/source_han_sans_cn_regular.otf");
        pathList.add(1, "fonts/source_han_sans_cn_medium.otf");
        pathList.add(2, "fonts/roboto_medium.ttf");
        pathList.add(3, "fonts/din_medium.otf");
        //这部分代码时控件在布局文件中设置属性的代码
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.L
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值