Commit 5a9c632b authored by yinjiacheng's avatar yinjiacheng

update 生活号认证信息输入字符过滤

parent 5360c59a
...@@ -11,15 +11,80 @@ import java.util.regex.Pattern ...@@ -11,15 +11,80 @@ import java.util.regex.Pattern
*/ */
object InputFilterUtil { object InputFilterUtil {
/** /**
* 只允许汉字输入 * 只允许汉字输入
*/ */
fun getChineseFilter(): InputFilter { fun getChineseFilter(): InputFilter {
return InputFilter { source, start, end, dest, dstart, dend -> return InputFilter { source, start, end, dest, dstart, dend ->
val pattern = Pattern.compile("[\\u4E00-\\u9FFF]+") val pattern = Pattern.compile("[\\u4E00-\\u9FFF]+")
val matcher = pattern.matcher(source.toString()) val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter "" if (!matcher.matches()) return@InputFilter ""
return@InputFilter null return@InputFilter null
}
} }
} }
\ No newline at end of file
/**
* 真实姓名过滤
* 汉字 + ·
*/
fun getRealNameFilter(): InputFilter {
return InputFilter { source, start, end, dest, dstart, dend ->
val pattern = Pattern.compile("[\\u4E00-\\u9FFF|·]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
}
}
/**
* 身份证号过滤
* 数字 + X
*/
fun getIDCardNumberFilter(): InputFilter {
return InputFilter { source, start, end, dest, dstart, dend ->
val pattern = Pattern.compile("[0-9|X]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
}
}
/**
* 手机号过滤
* 数字
*/
fun getPhoneNumberFilter(): InputFilter {
return InputFilter { source, start, end, dest, dstart, dend ->
val pattern = Pattern.compile("[0-9]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
}
}
/**
* 公司注册名过滤
* 汉字
*/
fun getRegistrationNameFilter(): InputFilter {
return InputFilter { source, start, end, dest, dstart, dend ->
val pattern = Pattern.compile("[\\u4E00-\\u9FFF]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
}
}
/**
* 统一社会信用代码过滤
* 数字 + 大写字母
*/
fun getRegistrationCodeFilter(): InputFilter {
return InputFilter { source, start, end, dest, dstart, dend ->
val pattern = Pattern.compile("[0-9A-Z]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
}
}
}
...@@ -3,6 +3,7 @@ package com.yidian.shenghuoquan.newscontent.widget ...@@ -3,6 +3,7 @@ package com.yidian.shenghuoquan.newscontent.widget
import android.content.Context import android.content.Context
import android.graphics.Color import android.graphics.Color
import android.text.Editable import android.text.Editable
import android.text.InputFilter
import android.text.TextUtils import android.text.TextUtils
import android.text.TextWatcher import android.text.TextWatcher
import android.util.AttributeSet import android.util.AttributeSet
...@@ -18,139 +19,146 @@ import com.yidian.shenghuoquan.newscontent.databinding.ViewLifeAccountAuthBusine ...@@ -18,139 +19,146 @@ import com.yidian.shenghuoquan.newscontent.databinding.ViewLifeAccountAuthBusine
* description: 生活号认证 营业执照信息录入 * description: 生活号认证 营业执照信息录入
*/ */
class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor( class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor(
context: Context, context: Context,
attrs: AttributeSet? = null, attrs: AttributeSet? = null,
defStyle: Int = 0 defStyle: Int = 0
) : YdConstraintLayout(context, attrs, defStyle), View.OnClickListener, TextWatcher { ) : YdConstraintLayout(context, attrs, defStyle), View.OnClickListener, TextWatcher {
private val viewBinding: ViewLifeAccountAuthBusinessInfoEditBinding = private val viewBinding: ViewLifeAccountAuthBusinessInfoEditBinding =
ViewLifeAccountAuthBusinessInfoEditBinding.bind( ViewLifeAccountAuthBusinessInfoEditBinding.bind(
View.inflate( View.inflate(
getContext(), getContext(),
R.layout.view_life_account_auth_business_info_edit, R.layout.view_life_account_auth_business_info_edit,
this this
) )
) )
private var callback: OnLifeAccountAuthBusinessInfoEditViewCallback? = null private var callback: OnLifeAccountAuthBusinessInfoEditViewCallback? = null
/** /**
* 是否输入错误标识位 * 是否输入错误标识位
*/ */
private var isInputError = false private var isInputError = false
init { init {
val typedArray = val typedArray =
context.obtainStyledAttributes(attrs, R.styleable.LifeAccountAuthBusinessInfoEditView) context.obtainStyledAttributes(attrs, R.styleable.LifeAccountAuthBusinessInfoEditView)
viewBinding.tvContent.text = viewBinding.tvContent.text =
typedArray.getText(R.styleable.LifeAccountAuthBusinessInfoEditView_LifeAccountAuthBusinessInfoEditView_content_text) typedArray.getText(R.styleable.LifeAccountAuthBusinessInfoEditView_LifeAccountAuthBusinessInfoEditView_content_text)
viewBinding.etContent.hint = viewBinding.etContent.hint =
typedArray.getText(R.styleable.LifeAccountAuthBusinessInfoEditView_LifeAccountAuthBusinessInfoEditView_hint_text) typedArray.getText(R.styleable.LifeAccountAuthBusinessInfoEditView_LifeAccountAuthBusinessInfoEditView_hint_text)
typedArray.recycle() typedArray.recycle()
viewBinding.ivClear.setOnClickListener(this) viewBinding.ivClear.setOnClickListener(this)
viewBinding.etContent.addTextChangedListener(this) viewBinding.etContent.addTextChangedListener(this)
}
/**
* 展示错误提示
*/
fun showErrorTips(tips: String) {
viewBinding.tvErrorTips.isVisible = true
viewBinding.tvErrorTips.text = tips
}
/**
* 隐藏错误提示
*/
private fun dismissErrorTips() {
viewBinding.tvErrorTips.isVisible = false
viewBinding.tvErrorTips.text = ""
}
/**
* 清除输入的文字
*/
fun clearEditContent() {
viewBinding.etContent.setText("")
if (isInputError) {
dismissErrorTips()
cancelHighLightEditContent()
} }
callback?.onTextClear(this)
/** }
* 展示错误提示
*/ /**
fun showErrorTips(tips: String) { * 填充传入的文字
viewBinding.tvErrorTips.isVisible = true */
viewBinding.tvErrorTips.text = tips fun fillEditContent(content: String?) {
if (!TextUtils.isEmpty(content)) {
viewBinding.etContent.setText(content)
viewBinding.ivClear.visibility = View.VISIBLE
} }
}
/**
* 隐藏错误提示 /**
*/ * 禁止修改
private fun dismissErrorTips() { */
viewBinding.tvErrorTips.isVisible = false fun disableModify() {
viewBinding.tvErrorTips.text = "" viewBinding.ivClear.isVisible = false
viewBinding.etContent.keyListener = null
}
/**
* 高亮显示输入文本
*/
fun highLightEditContent() {
isInputError = true
viewBinding.etContent.setTextColor(Color.parseColor("#FFFF3A3A"))
}
/**
* 取消高亮显示输入文本
*/
private fun cancelHighLightEditContent() {
isInputError = false
viewBinding.etContent.setTextColor(Color.parseColor("#FF333333"))
}
/**
* 设置输入过滤
*/
fun setInputFilters(vararg filter: InputFilter) {
viewBinding.etContent.filters = filter
}
override fun onClick(v: View?) {
if (v?.id == R.id.iv_clear) {
// 清除输入框中的内容
clearEditContent()
} }
}
/** override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
* 清除输入的文字
*/
fun clearEditContent() {
viewBinding.etContent.setText("")
if (isInputError) {
dismissErrorTips()
cancelHighLightEditContent()
}
callback?.onTextClear(this)
}
/** }
* 填充传入的文字
*/
fun fillEditContent(content: String?) {
if (!TextUtils.isEmpty(content)) {
viewBinding.etContent.setText(content)
viewBinding.ivClear.visibility = View.VISIBLE
}
}
/** override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
* 禁止修改
*/ }
fun disableModify() {
viewBinding.ivClear.isVisible = false override fun afterTextChanged(s: Editable?) {
viewBinding.etContent.keyListener = null // 处理一键清除按钮
viewBinding.ivClear.isVisible = !TextUtils.isEmpty(s)
callback?.onTextChange(this, s.toString())
if (isInputError) {
dismissErrorTips()
cancelHighLightEditContent()
} }
}
fun setOnLifeAccountAuthBusinessInfoEditViewCallback(callback: OnLifeAccountAuthBusinessInfoEditViewCallback) {
this.callback = callback
}
interface OnLifeAccountAuthBusinessInfoEditViewCallback {
/** /**
* 高亮显示输入文本 * 清除内容
*/ */
fun highLightEditContent() { fun onTextClear(from: LifeAccountAuthBusinessInfoEditView)
isInputError = true
viewBinding.etContent.setTextColor(Color.parseColor("#FFFF3A3A"))
}
/** /**
* 取消高亮显示输入文本 * 内容修改
*/ */
private fun cancelHighLightEditContent() { fun onTextChange(from: LifeAccountAuthBusinessInfoEditView, text: String)
isInputError = false }
viewBinding.etContent.setTextColor(Color.parseColor("#FF333333")) }
}
override fun onClick(v: View?) {
if (v?.id == R.id.iv_clear) {
// 清除输入框中的内容
clearEditContent()
}
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
}
override fun afterTextChanged(s: Editable?) {
// 处理一键清除按钮
viewBinding.ivClear.isVisible = !TextUtils.isEmpty(s)
callback?.onTextChange(this, s.toString())
if (isInputError) {
dismissErrorTips()
cancelHighLightEditContent()
}
}
fun setOnLifeAccountAuthBusinessInfoEditViewCallback(callback: OnLifeAccountAuthBusinessInfoEditViewCallback) {
this.callback = callback
}
interface OnLifeAccountAuthBusinessInfoEditViewCallback {
/**
* 清除内容
*/
fun onTextClear(from: LifeAccountAuthBusinessInfoEditView)
/**
* 内容修改
*/
fun onTextChange(from: LifeAccountAuthBusinessInfoEditView, text: String)
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment