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
相关产品推荐
相关产品推荐

