笔记本样式的EditText控件(每行均带下划虚线)

这篇博客介绍了如何创建一个自定义的LinedEditText控件,该控件在每行文本下方绘制带有间隔的虚线。通过重写onDraw方法,使用DashPathEffect实现动态画线,可以根据需要调整虚线的颜色和样式。示例代码展示了如何在XML布局中使用这个自定义组件,并设置了相关属性如行间距、文字颜色和大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.zongyi.trip.ui;


import com.zongyi.trip.R;


import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.PathEffect;
import android.util.AttributeSet;
import android.widget.EditText;


@SuppressLint({ "ResourceAsColor", "DrawAllocation" })
public class LinedEditText extends EditText {
//    private Paint mPaint = new Paint();


    public LinedEditText(Context context) {
        super(context);
        initPaint();
    }


    public LinedEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        initPaint();
    }


    public LinedEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initPaint();
    }


    private void initPaint() {
//        mPaint.setStyle(Paint.Style.STROKE);
////        mPaint.setColor(0x80000000); 
//    	mPaint.setStyle(Paint.Style.STROKE);  
//    	mPaint.setColor(R.color.dashed_line_color);         
//        PathEffect effects = new DashPathEffect(new float[]{5,5,5,5},1);  
//        mPaint.setPathEffect(effects);
    }


    @Override protected void onDraw(Canvas canvas) {
    	Paint mPaint = new Paint();
//       mPaint.setColor(0x80000000); 
    	mPaint.setStyle(Paint.Style.STROKE);  
    	mPaint.setColor(Color.LTGRAY); 
    	PathEffect effects = new DashPathEffect(new float[]{5,5,5,5},5);  
      mPaint.setPathEffect(effects);
    	
        int left = getLeft();
        int right = getRight();
        int paddingTop = getPaddingTop();
        int paddingBottom = getPaddingBottom();
        int paddingLeft = getPaddingLeft();
        int paddingRight = getPaddingRight();
        int height = getHeight();
        int lineHeight = getLineHeight();
        int spcingHeight = (int) getLineSpacingExtra();
        int count = (height-paddingTop-paddingBottom) / lineHeight;
        
          


        for (int i = 0; i < count; i++) {
            int baseline = lineHeight * (i+1) + paddingTop - spcingHeight/2 ;
            canvas.drawLine(left+paddingLeft, baseline, right-paddingRight, baseline, mPaint);
        }


        super.onDraw(canvas);
    }
}
 <com.zongyi.trip.ui.LinedEditText
            android:id="@+id/edittext_message"
            android:layout_width="fill_parent"
            android:layout_height="200dp"
            android:lineSpacingExtra="15dp"
            android:gravity="top"
            android:textColor="#ACB6BB"
            android:textSize="18sp" />



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值