lmw
2023-05-12 f67802a41f9e01444d1115f34ecc6e1beb05fc3b
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
package cn.sinata.xldutils.view
 
import android.content.Context
import android.content.res.TypedArray
import android.text.InputFilter
import android.util.AttributeSet
import android.widget.EditText
 
import cn.sinata.xldutils.R
import cn.sinata.xldutils.sysErr
import cn.sinata.xldutils.utils.LengthFilter
 
/**
 *  没有使用@JvmOverloads,不知道是书写bug,还是kotlin的bug,用@JvmOverloads在init里面初始化时。
 *  filters = arrayOf<InputFilter>(LengthFilter(max))这句怎么都不生效。。。
 *
 *  长度maxLength按中文1个,英文半个算。
 */
 
class LengthEditText : EditText {
 
    constructor(context: Context) : super(context) {
        init(context, null, 0)
    }
 
    constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
        init(context, attrs, 0)
    }
 
    constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
        init(context, attrs, defStyleAttr)
    }
 
    internal fun init(context: Context, attrs: AttributeSet?, defStyleAttr: Int) {
        if (attrs != null) {
            val a = context.obtainStyledAttributes(attrs, R.styleable.LengthEditText)
            val max = a.getInt(R.styleable.LengthEditText_android_maxLength, -1)
            a.recycle()
            if (max >= 0) {
                filters = arrayOf<InputFilter>(LengthFilter(max))
            }
        }
    }
}