1

我想做的是更改 EditText 的状态(实际上是背景)以反映其内容的有效性。例如,如果用户输入 999,其中 999 在上下文中无效,则 EditText 应该有一个红色边框代替默认的橙色边框,同样,一旦文本有效,它应该有一个绿色边框。

我探索过的方法:

  1. 通过 editor.setStyle(R.styles.SomeID) 以编程方式更改 EditText 的样式。在android中似乎是不可能的。
  2. 在 R.attr 中添加自定义状态(state_valid、state_invalid),将它们与红色/绿色 9 补丁相关联,然后使用这些状态之一调用 drawable.setState()。这在某种意义上是有效的,可以通过 getState() 读回状态,但边框没有改变颜色。
  3. 在检测到(无效)有效性时直接设置后台资源。这可以正常工作,产生正确的视觉效果,但似乎有点做作,并且只允许一种状态(例如,我必须手动检查是否按下、启用等)。

鉴于有限的 UI 房地产,我不愿引入一个单独的 UI 元素来直观地向用户反馈文本的有效性,因此我希望在 EditText 本身中显示它。

那么..这是可行的吗?这似乎是一个相当常见的用例,那么有没有人以一种简单而优雅的方式实现了我想要做的事情?

4

3 回答 3

2

我建议更改文本颜色以指示有效性,而不是通过您描述的任何技术(其中只有#3 似乎实用)来更改对焦环的颜色。

另一种可能性是尝试setCompoundDrawablesWithIntrinsicBounds()修改内容左侧或右侧的图标EditText以指示有效性。我记得几个月前和某人讨论过这项技术,然后忘记了他们是否成功了。

当然,另一种选择是不允许无效输入,通过自定义输入过滤器或侦听器或其他方式。

于 2009-12-27T01:43:02.883 回答
1

好吧,我只是扩展 EditText 类并在上面构建所需的功能(使用您建议的第三种方法,因为它有效:-))。这样做,你只需要走一次,一旦你知道最好的方法,你就可以改变你的实现(我也会使用第三种方法亲自解决它,对我来说似乎很好)。

于 2009-12-27T00:34:28.250 回答
0

我认为调用 invalidateDrawable(yourDrawable) 将适用于方法 2。我没有尝试..但它是有道理的

于 2010-02-21T02:10:19.213 回答