You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个TextView中实现内容部分掩码的显示与切换?

单TextView实现内容掩码与完整显示切换

需求回顾

需要实现:接收固定长度字符串,默认仅显示最后4位(前面用*掩码,如123456789abc默认显示*******89abc),点击图标可切换显示完整字符串或掩码字符串,替代原双TextView的实现方案。

实现思路

只需要维护一个TextView,核心是动态切换其文本内容,无需额外的TextView存储掩码文本:

  • 留存原始完整字符串:在代码中保存接收的完整字符串,掩码文本按需动态生成
  • 状态切换逻辑:点击图标时,根据当前显示状态(隐藏/完整),直接修改TextView的文本并切换图标
  • 兼容边界情况:优化掩码生成逻辑,处理字符串长度≤4的场景

具体代码实现

1. 定义基础变量

private val fullString = "123456789abc" // 替换为实际接收的完整字符串
private var isContentHidden = true // 默认处于掩码显示状态

2. 初始化TextView默认显示

// 页面初始化时,设置默认掩码文本
_binding?.strNumber?.text = createHiddenStr(fullString)

3. 修改图标点击事件

_binding?.viewIcon?.setOnClickListener {
    // 切换状态标记
    isContentHidden = !isContentHidden
    
    if (isContentHidden) {
        // 切换到掩码显示:更新图标+设置掩码文本
        _binding?.viewIcon?.setImageDrawable(AppCompatResources.getDrawable(requireContext(), R.drawable.ic_view))
        _binding?.strNumber?.text = createHiddenStr(fullString)
    } else {
        // 切换到完整显示:更新图标+设置完整文本
        _binding?.viewIcon?.setImageDrawable(AppCompatResources.getDrawable(requireContext(), R.drawable.ic_hide))
        _binding?.strNumber?.text = fullString
    }
}

4. 优化掩码生成函数

private fun createHiddenStr(value: String): String {
    // 如果字符串长度≤4,直接返回原字符串,无需掩码
    return if (value.length <= 4) {
        value
    } else {
        "*".repeat(value.length - 4) + value.takeLast(4)
    }
}

优势说明

  • 简化布局:减少冗余TextView,降低布局层级复杂度
  • 逻辑清晰:无需维护两个TextView的可见性状态,代码更易维护
  • 资源高效:无需额外存储掩码字符串,按需生成节省内存

内容的提问来源于stack exchange,提问作者Seb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:05:02