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

Kotlin Android如何实现TextView显示数秒后隐藏,切换输入可重复触发?

解决方案

问题根因

  • 首次alpha动画执行后如果设置了fillAfter = true,会直接修改TextView的alpha属性为0,后续如果没有手动重置为1,再次触发动画时从0到0自然看不到效果
  • 没有移除上一次的延迟隐藏任务,多次触发时旧任务会提前把TextView隐藏,导致逻辑看起来失效

实现步骤

1. 定义全局变量与生命周期绑定

在Fragment中添加隐藏任务的Runnable,同时在页面销毁时移除未执行的任务避免内存泄漏:

open class Begin1Fragment : Fragment(), View.OnClickListener {
    private lateinit var button: Button
    private lateinit var editText: EditText
    private lateinit var textView: TextView
    // 新增:隐藏TextView的任务
    private val hideTextRunnable = Runnable {
        // 可自定义淡出动画时长,不需要动画的话直接设置visibility即可
        textView.animate()
            .alpha(0f)
            .setDuration(300)
            .withEndAction {
                textView.visibility = View.GONE
            }
            .start()
    }

    // ... 原有onCreateView逻辑不变

    override fun onDestroyView() {
        super.onDestroyView()
        // 移除未执行的隐藏任务,避免内存泄漏
        textView.removeCallbacks(hideTextRunnable)
    }
}

2. 封装自动显示隐藏方法(可选,简化代码)

private fun showTipText(content: String) {
    // 先移除上一次的隐藏任务,避免多次触发冲突
    textView.removeCallbacks(hideTextRunnable)
    // 重置TextView状态为显示
    textView.text = content
    textView.visibility = View.VISIBLE
    textView.alpha = 1f
    // 延迟3秒后执行隐藏
    textView.postDelayed(hideTextRunnable, 3000)
}

3. 替换原有逻辑

适配星期选择场景:

override fun onClick(v: View?) {
    if (editText.text.isNotEmpty()) {
        when (editText.text.toString().toInt()) {
            1 -> showTipText("您手动选择的是:星期一")
            2 -> showTipText("您手动选择的是:星期二")
            3 -> showTipText("您手动选择的是:星期三")
            4 -> showTipText("您手动选择的是:星期四")
            5 -> showTipText("您手动选择的是:星期五")
            6 -> showTipText("您手动选择的是:星期六")
            7 -> showTipText("您手动选择的是:星期日")
            else -> showTipText("不存在该星期数")
        }
    }
}

适配正方形周长计算场景:

override fun onClick(v: View?) {
    when {
        editText.text.isNotEmpty() -> {
            val a = editText.text.toString().toInt()
            if (a <= 0){
                Toast.makeText(requireContext(), "正方形周长不能为负数或0", Toast.LENGTH_LONG).show()
            } else if (a > 0) {
                val p = 4 * a
                showTipText("正方形周长为:$p")
            } else {
                Toast.makeText(requireContext(), "错误", Toast.LENGTH_LONG).show()
            }
        }
        editText.text.isEmpty() -> {
            Toast.makeText(requireContext(), "请输入数据", Toast.LENGTH_LONG).show()
        }
        else -> {
            Toast.makeText(requireContext(), "错误!", Toast.LENGTH_LONG).show()
        }
    }
}

可选调整

  • 不需要淡出动画的话,直接把hideTextRunnable里的动画逻辑删除,仅保留textView.visibility = View.GONE即可
  • 3000毫秒的显示时长、300毫秒的动画时长都可以根据需求自行修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:21:03