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

点击按钮后Spannable文本仅短暂显示,该如何修复?

问题原因与修复方案

核心原因

点击按钮后Spannable文本一闪而过,最常见的原因是**submit按钮触发了页面/Activity的重新加载(比如默认提交行为、后续代码覆盖文本)**,导致刚设置的文本被快速重置。

修复步骤

  1. 阻止按钮默认刷新行为
    如果你的submit按钮存在默认提交/页面刷新逻辑,在点击事件中添加代码阻断该行为:
// 全局变量声明
private TextView charge_month;
private Button submit;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    
    charge_month = findViewById(R.id.charge_per_month);
    submit = findViewById(R.id.submit);

    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String exp_amount = "₹ 5600";
            String act_amount = "₹ 6708";
            String complete_string = exp_amount + "  " + act_amount;

            Spannable str = new SpannableString(complete_string);
            // 设置删除线和白色文本
            str.setSpan(new StrikethroughSpan(), 0, exp_amount.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            str.setSpan(new ForegroundColorSpan(Color.WHITE), 0, exp_amount.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            // 修正区间:中间是两个空格,红色文本起始索引为exp_amount长度+2
            str.setSpan(new ForegroundColorSpan(Color.RED), exp_amount.length() + 2, complete_string.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

            charge_month.setText(str);

            // 阻止按钮默认提交/刷新行为
            view.cancelPendingInputEvents();
            // 可选:防止重复点击触发多次刷新
            submit.setEnabled(false);
        }
    });
}
  1. 排查文本被覆盖的情况
    检查是否有异步操作(比如网络请求回调、定时器)在按钮点击后重新设置了charge_month的文本,若存在则调整代码顺序或移除不必要的文本重置逻辑。

  2. 修正Spannable区间错误
    你的代码中红色文本的起始索引计算有误(中间是两个空格,应使用exp_amount.length() + 2而非+1),修正后能保证文本样式显示正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:01:15