点击按钮后Spannable文本仅短暂显示,该如何修复?
问题原因与修复方案
核心原因
点击按钮后Spannable文本一闪而过,最常见的原因是**submit按钮触发了页面/Activity的重新加载(比如默认提交行为、后续代码覆盖文本)**,导致刚设置的文本被快速重置。
修复步骤
- 阻止按钮默认刷新行为
如果你的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); } }); }
排查文本被覆盖的情况
检查是否有异步操作(比如网络请求回调、定时器)在按钮点击后重新设置了charge_month的文本,若存在则调整代码顺序或移除不必要的文本重置逻辑。修正Spannable区间错误
你的代码中红色文本的起始索引计算有误(中间是两个空格,应使用exp_amount.length() + 2而非+1),修正后能保证文本样式显示正确。
内容的提问来源于stack exchange,提问作者user20229203
相关产品推荐
相关产品推荐

