android 4.2没有显示错误指示符(表单验证)?

时间:2013-06-05 06:57:20

标签: android validation error-handling indicator

背景

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

甚至有一个很好的库(here),这里有很多文章可以使用它。

一切顺利,直到我在Android 4.2的nexus 4上运行它。

问题

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

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

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

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


编辑:

这里有一些截图:

android 4.2.2:

enter image description here

android 2.3.5:

enter image description here


编辑:

在我认为这是自己解决之后,我终于找到了这个错误发生的时间: 如果焦点在另一个没有错误的editText上,并且验证错误在另一个editText上,则指示器不会显示,直到editText获得焦点。

1 个答案:

答案 0 :(得分:4)

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

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

它应该解决你的问题。我之前发现了类似的问题,并通过更改主题来纠正这个问题。 但我没有多少研究,但我觉得这是Android问题,泡沫应该尝试根据主题改变文字颜色。

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

问题2: 您正在谈论的另一个没有关注焦点的问题,您可以考虑以下链接:Text Truncating and Focus Issue

----------------------------------------更新后的答案 - -------------------------------------------

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");

让我知道任何问题。