/
ExceedEdittext.kt
51 lines (46 loc) · 1.85 KB
/
ExceedEdittext.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.beerus.exceededittext.widgets
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Rect
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatEditText
import com.beerus.exceededittext.R
class ExceedEdittext @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = com.google.android.material.R.attr.editTextStyle
) : AppCompatEditText(context, attrs, defStyleAttr) {
private var highLightColor = Color.TRANSPARENT
private var maxCharacter = 0
private val paintLine by lazy { Paint() }
private val rect by lazy { Rect() }
init {
context.obtainStyledAttributes(attrs, R.styleable.ExceedEdittext).apply {
highLightColor =
getColor(R.styleable.ExceedEdittext_highLightColor, Color.TRANSPARENT)
maxCharacter =
getInt(R.styleable.ExceedEdittext_maxCharacter, 0)
recycle()
}
paintLine.color = highLightColor
}
override fun onDraw(canvas: Canvas?) {
if (length() > maxCharacter && maxCharacter != 0) {
val lineMax = layout.getLineForOffset(maxCharacter)
for (i in lineMax until lineCount) {
rect.top = layout.getLineTop(i) + totalPaddingTop
rect.left = if (i == lineMax) {
layout.getPrimaryHorizontal(maxCharacter).toInt() + totalPaddingStart
} else {
layout.getLineLeft(i).toInt() + totalPaddingStart
}
rect.right = layout.getLineRight(i).toInt() + totalPaddingStart
rect.bottom = layout.getLineBottom(i) + totalPaddingTop
canvas?.drawRect(rect, paintLine)
}
}
super.onDraw(canvas)
}
}