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

Android TextInputLayout设置endIconMode为END_ICON_NONE后,无法通过代码重新设置为END_ICON_CLEAR_TEXT

Android TextInputLayout设置endIconMode为END_ICON_NONE后,无法通过代码重新设置为END_ICON_CLEAR_TEXT

嘿,我之前也踩过这个坑!问题出在当你把endIconMode设为END_ICON_NONE时,TextInputLayout会直接销毁掉对应清除图标的视图,之后单纯把模式改回END_ICON_CLEAR_TEXT,系统并不会自动重新创建这个图标视图,尤其是你还禁用过控件的话,这个问题会更明显。

给你两个靠谱的解决方案,选哪个都行:

方案一:用「隐藏图标」替代「移除模式」

与其直接把模式改成END_ICON_NONE,不如保留END_ICON_CLEAR_TEXT的模式,只是隐藏图标:

  • 需要隐藏图标时:
    textInputLayout.setEndIconVisible(false)
    
  • 需要重新显示时,先确保控件已启用,再显示图标:
    textInputLayout.isEnabled = true
    textInputLayout.setEndIconVisible(true)
    

这个方法更稳妥,因为图标视图并没有被销毁,只是隐藏了,后续恢复起来毫无问题。

方案二:强制触发图标视图重建

如果你必须使用END_ICON_NONE模式,那在改回END_ICON_CLEAR_TEXT时,先触发一下视图的重建逻辑:

// 先确保控件处于启用状态
textInputLayout.isEnabled = true
// 先设置一个临时的图标模式,再改回CLEAR_TEXT,强制系统重建视图
textInputLayout.endIconMode = TextInputLayout.END_ICON_PASSWORD_TOGGLE
textInputLayout.endIconMode = TextInputLayout.END_ICON_CLEAR_TEXT
// 最后刷新一下状态,确保图标显示出来
textInputLayout.refreshDrawableState()

这样折腾一下,系统就会重新创建清除图标并显示了。

你可以试试这两种方法,应该能解决你的问题!

备注:内容来源于stack exchange,提问作者nuwancy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 08:08:04