您的位置:首页 > 移动开发 > Android开发

Android下EditText 添加字体下划线

2016-06-23 17:28 621 查看
其实也就是通过edittext 内容行数在绘制一条线

控制光标高度可以自定一个 shape:

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android"

    android:shape="rectangle" >

    <size 

        android:width="2dip" />

    <solid

        android:color="#d0d0d0" />

    <padding 

        android:top="2sp"

        android:bottom="-11sp" />

</shape>

在edittext 里面 加入引用自定义的shape : android:textCursorDrawable="@drawable/cursor_red"

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Rect;

import android.text.TextUtils;

import android.util.AttributeSet;

import android.util.Log;

import android.widget.EditText;

public class UnderlineEditText extends InnerSrollViewEditText { 

    private static final String TAG = "UnderlineEditText"; 

    private Paint mPaint; 

    private Rect mRect; 

    private float mult = 1.5f; 

    private float add = 2.0f; 

    private boolean isShowUnderLine = true;

   

    public UnderlineEditText(Context context, AttributeSet attrs) { 

        super(context, attrs); 

        init(); 

    } 

   

    public UnderlineEditText(Context context) { 

        super(context); 

        init(); 

    } 

   

    private void init() { 

        mRect = new Rect(); 

        mPaint = new Paint(); 

        mPaint.setStyle(Paint.Style.STROKE); 

        mPaint.setColor(Color.GRAY); 

        mPaint.setAntiAlias(true); 

        this.setLineSpacing(add, mult); 

    } 

   

    @Override 

    public void onDraw(Canvas canvas) { 

        Log.d(TAG, "func [onDraw]");

        //控制是否显示下划线

        if (isShowUnderLine) {

        int count = getLineCount();

        String content = getText().toString().trim();

        for (int i = 0; i < count; i++) { 

        getLineBounds(i, mRect); 

        int baseline = 0; 

        if (TextUtils.isEmpty(content)) {

        baseline = (i) * getLineHeight(); 

        }else{

        baseline = (i + 1) * getLineHeight(); 

        }

        canvas.drawLine(mRect.left, baseline-5, mRect.right, baseline-5, mPaint); 

        } 
}

        super.onDraw(canvas); 

    } 

    public void setIsShowUnderLine(boolean flag){

    isShowUnderLine = flag;

    }

   

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: