我有一个文本字段并试图实现类似的目标
我正在尝试通过视觉转换来做到这一点,但遇到了问题。 当我编辑时似乎出现错误,如
offsetmapping.originaltotransformed returned invalid mapping:
有人知道我怎样才能实现这个目标吗?
class UserNameMaskTransformation() : VisualTransformation {
override fun filter(text: AnnotatedString): TransformedText {
return maskFilter(text)
}
}
fun maskFilter(text: AnnotatedString): TransformedText {
var maskLen = 4
var maskChar = "*"
val maskingChars = AnnotatedString(maskChar.repeat(maskLen))
val subString = AnnotatedString(text.substring(4))
return TransformedText(maskingChars + subString, OffsetMapping.Identity)
}
您在执行
maskFilter
方法时遇到问题!假设如果文本为空或少于 4 个字符,则该行中的应用程序将会崩溃text.substring(4)
,因为如果文本为空或少于 4 个字符,则第四个索引不存在。
答案是取文本长度和数字4之间的最小值。这样,如果文本长度小于4,我们将使用文本长度作为要屏蔽的字符数,否则我们将使用数字4你提供。
这是更新后的代码:
fun maskFilter(text: AnnotatedString): TransformedText {
var maskLen = 4
var maskChar = "*"
val m = min(maskLen, text.text.length)
val maskingChars = AnnotatedString(maskChar.repeat(m))
val subString = AnnotatedString(text.substring(m))
return TransformedText(maskingChars + subString, OffsetMapping.Identity)
}