4

背景

在 Android 上,您可以为任何 EditText 视图设置错误指示,以便向用户显示在那里键入(或未键入)的内容是错误的(称为“表单验证”)。

甚至还有一个很好的库(这里),这里的许多帖子都提供了如何使用它。

一切对我来说都很好,直到我在带有 Android 4.2 的 nexus 4 上运行它。

问题

有时,它只是不会显示错误的图标。在这种情况下,只有当我给editText(有问题的)焦点时,它才会显示气泡,但它是空的并且不显示错误的图标。

此外,在所有情况下,气泡始终是空的。

为什么会发生,我该如何解决?

注意:我使用 actionBarSherlock 库,所以我需要使用他们的主题或基于他们的主题。


编辑:

这里有一些截图:

安卓 4.2.2:

在此处输入图像描述

安卓 2.3.5:

在此处输入图像描述


编辑:

在我认为这已自行解决之后,我终于弄清楚了何时发生此错误:如果焦点在另一个没有错误的 editText 上,并且验证错误在另一个 editText 上,则指示符是' t 显示直到 editText 获得焦点。

4

1 回答 1

4

问题1:问题是应用程序的主题。尝试将主题更改为一些较暗的主题,例如:

<style name="AppBaseTheme" parent="android:Theme.Black">

它应该可以解决您的问题。我早些时候发现了这个类似的问题,并通过更改主题来纠正这个问题。但是我没有研究太多,但我觉得这是Android问题,气泡应该尝试根据主题更改文本颜色。

让我知道它是否解决了您的问题。

问题2:您所说的另一个问题是不关注焦点,您可以考虑以下链接:文本截断和焦点问题

----------------------------------------更新答案-------- -------------------------------------

Q1) What should I add to the theme configuration in order for it to always work, no matter what theme I use? 

根据我的发现,这里有一些结果:

[注:仅适用于运行3.0及以上的设备]

如果您的构建目标是:

  • 小于 11,然后使用

    parent="android:Theme.Light"    --> setError() message doesn't work or shows very faded text colour almost blending with color white
    parent="android:Theme"      --> setError() message works
    
  • 大于 11,然后使用

    parent="android:Theme.Holo.Light" --> setError() message works
    parent="android:Theme.Holo"       --> setError() message works
    

由于您的项目支持低于 11 API 级别的设备,并且您也希望支持 4.0 及以上,因此您最好的选择是将HoloEverywhere集成到您的项目中,这将解决您的问题,并且您将能够使用您的 ActionBarSherlock同样,为了兼容性,请查看此SO Post

Q2) What are the available configurations for the error indication UI ?

大多数情况下,您可以自定义可绘制对象和图标,但我怀疑您是否能够配置您的文本和背景(如果有人知道更多可能会指出这一点)

我建议您查看此SO Post以获得即时答案。

为了放置正确的焦点,对于每个验证检查,您可以放置​​以下代码:

EditText.setFocusableInTouchMode(true);
EditText.requestFocus();
EditText.setError("My Error Text");

让我知道任何问题。

于 2013-06-12T09:38:30.983 回答