自定义Editext的下划线高度

1 tectview、editext在物理设备不显示问题
尝试设置颜色试试

2 Editext去下划线属性

android:background="@null"

3 使用系统默认的Editext下划线太粗,需要控制其下划线高度

package com.litec.cashierscale.uitls;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.EditText;

import com.litec.cashierscale.R;

public class LineEditText extends EditText {

    // 画笔 用来画下划线
    private Paint paint;
    private int linePosition;
    // 分割线变量
    private int lineColor_click,lineColor_unclick;// 点击时 & 未点击颜色
    private int color;
    public LineEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);

    }

    private void init(final Context context, final AttributeSet attrs) {
        // 获取控件资源
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.SuperEditText);

        linePosition = typedArray.getInteger(R.styleable.SuperEditText_linePosition, 1);

        // 1. 设置画笔
        paint = new Paint();
        paint.setStrokeWidth(2.0f); // 分割线粗细

        // 2. 设置分割线颜色(使用十六进制代码,如#333、#8e8e8e)
        int lineColorClick_default = context.getResources().getColor(R.color.tv_selected); // 默认 = 蓝色#1296db
        int lineColorunClick_default = context.getResources().getColor(R.color.hint_color); // 默认 = 灰色#9b9b9b
        lineColor_click = typedArray.getColor(R.styleable.SuperEditText_lineColor_click, lineColorClick_default);
        lineColor_unclick = typedArray.getColor(R.styleable.SuperEditText_lineColor_unclick, lineColorunClick_default);
        color = lineColor_unclick;
        // 消除自带下划线
        setBackground(null);
    }
    /**
     * 关注1
     * 作用:判断是否显示删除图标 & 设置分割线颜色
     */
    private void setDeleteIconVisible(boolean deleteVisible,boolean leftVisible) {

        color = leftVisible ? lineColor_click : lineColor_unclick;

        invalidate();
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        super.onFocusChanged(focused, direction, previouslyFocusedRect);
        setDeleteIconVisible(focused && length() > 0,focused);
        // focused = 是否获得焦点
        // 同样根据setDeleteIconVisible()判断是否要显示删除图标->>关注1
    }


    @Override
    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
        super.onTextChanged(text, start, lengthBefore, lengthAfter);
        setDeleteIconVisible(hasFocus() && text.length() > 0,hasFocus());
        // hasFocus()返回是否获得EditTEXT的焦点,即是否选中
        // setDeleteIconVisible() = 根据传入的是否选中 & 是否有输入来判断是否显示删除图标->>关注1
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        paint.setColor(color);
//        setTextColor(color);
        setTextColor(getResources().getColor(R.color.black_alpha60));

        int x=this.getScrollX(); // 获取延伸后的长度
        int w=this.getMeasuredWidth(); // 获取控件长度

        canvas.drawLine(0, this.getMeasuredHeight()- linePosition, w+x,
                this.getMeasuredHeight() - linePosition, paint);


    }
}

引用

 <com.litec.cashierscale.uitls.LineEditText
            android:id="@+id/pwd_edt"
            android:inputType="textPassword"
            android:drawableLeft="@drawable/password_selector"
            android:layout_width="226dp"
            android:layout_height="wrap_content"
            android:background="@color/transparent"
            android:textColorHint="@color/textColorHint"
            android:drawablePadding="10dp"
            android:hint="@string/input_psw"
            android:imeOptions="actionDone"
            android:paddingBottom="@dimen/size_4dp"
            android:digits="1234567890"
            android:textSize="10dp"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值