我想做的是更改 EditText 的状态(实际上是背景)以反映其内容的有效性。例如,如果用户输入 999,其中 999 在上下文中无效,则 EditText 应该有一个红色边框代替默认的橙色边框,同样,一旦文本有效,它应该有一个绿色边框。
我探索过的方法:
- 通过 editor.setStyle(R.styles.SomeID) 以编程方式更改 EditText 的样式。在android中似乎是不可能的。
- 在 R.attr 中添加自定义状态(state_valid、state_invalid),将它们与红色/绿色 9 补丁相关联,然后使用这些状态之一调用 drawable.setState()。这在某种意义上是有效的,可以通过 getState() 读回状态,但边框没有改变颜色。
- 在检测到(无效)有效性时直接设置后台资源。这可以正常工作,产生正确的视觉效果,但似乎有点做作,并且只允许一种状态(例如,我必须手动检查是否按下、启用等)。
鉴于有限的 UI 房地产,我不愿引入一个单独的 UI 元素来直观地向用户反馈文本的有效性,因此我希望在 EditText 本身中显示它。
那么..这是可行的吗?这似乎是一个相当常见的用例,那么有没有人以一种简单而优雅的方式实现了我想要做的事情?