Android:view / drawable自定义样式可能吗?

时间:2009-12-27 00:30:38

标签: android coding-style drawable

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

我探索过的方法:

  1. 通过editor.setStyle(R.styles.SomeID)之类的编程方式更改EditText的样式。在android中似乎是不可能的。
  2. 在R.attr中添加自定义状态(state_valid,state_invalid),将它们与红色/绿色9补丁相关联,然后使用这些状态之一调用drawable.setState()。这可以通过getState()读回状态,但边框没有改变颜色。
  3. 在检测到(有效)时直接设置后台资源。这样可以正常工作,产生正确的视觉效果,但似乎有点笨拙,并且只允许一个状态(例如,我必须手动检查EditText是否被按下,启用等)。
  4. 鉴于有限的UI空间,我不愿意引入一个单独的UI元素来直观地反馈文本对用户的有效性,因此我希望在EditText本身中显示它。

    那么..这是甚至可行的吗?这似乎是一个相当常见的用例,所以有人以直截了当的方式实现了我想要做的事情吗?

3 个答案:

答案 0 :(得分:2)

我建议更改文字颜色以表示有效性,而不是通过您描述的任何技术改变聚焦环的颜色(其中只有#3看起来很实用)。

另一种可能性是尝试setCompoundDrawablesWithIntrinsicBounds()修改EditText内容左侧或右侧的图标以指示有效性。我记得几个月前和某人讨论过这种技术并忘记它们是否能够正常工作。

当然,另一个选择是不允许通过自定义输入过滤器或监听器等无效输入。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我认为对invalidateDrawable(yourDrawable)的调用可以使用方法2。 我没有尝试..但它有意义