NumberPicker在禁用时不灰色

问题描述:

我相信我可能在Android UI中发现了一个错误,但我想确保我没有做错什么。这里是我正在运行的代码的简化版本,导致了这个问题。这个监听器在我的UI中被设置在一个特定的NumberPicker上,并且它正确地禁用/启用了一些东西,但是如果用户改变了它禁用的其他NumberPicker的值,它的行为有点奇怪。NumberPicker在禁用时不灰色

它仍然正确地禁用了输入,但它未能灰显该值,使其看起来仍然处于启用状态。这是打算?难道我做错了什么?

NumberPicker.OnValueChangeListener diceChangeListener = new NumberPicker.OnValueChangeListener() { 
    @Override 
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) { 
     View parent = (View) picker.getParent();  

     if (newVal == 0) { 
      ((NumberPicker) parent.findViewById(R.id.diceCountPicker1)).setEnabled(false); 
     } else if (oldVal == 0) { 
      ((NumberPicker) parent.findViewById(R.id.diceCountPicker1)).setEnabled(true); 
     } 
    } 
}; 

让我知道是否有更好的方法来做到这一点,或者如果这是一个合法的错误。如果它是一个错误,是否有办法解决它?

编辑:这是在XML中diceCountPicker1的定义:

<NumberPicker 
    android:id="@+id/diceCountPicker1" 
    android:layout_width="48dp" 
    android:layout_height="128dp" 
    android:descendantFocusability="blocksDescendants" 
    /> 

编辑2:

我在模拟器进行了测试,证实该问题不杰利贝恩之前存在(4.1) 。它在ICS中正常工作。这是...烦人。但我现在可能能够忍受它。我会把这个问题留给潜在的方法来解决这个bug,但是它在我看来就像一个真正的bug,我怀疑它可以被修复。

+0

你可以发布一些布局代码,以便如何在xml文件中声明你的'diceCountPicker1'吗? –

+0

使用NumberPicker的XML更新了问题。 – Utoxin

+0

查看下面发布的解决方案。尝试一下,它适合我。谢谢。 –

好吧,没有额外的反馈意见,我会继续并关闭它。以下是我所知道的:

这似乎是Jellybean中引入的错误。我已经在模拟器中进行了测试,并且UI在ICS和更早版本中按预期工作。目前,我只是要处理这个问题,并试图提交官方错误报告。

试试这种方法。

 NumberPicker npicker = (NumberPicker) findViewById(R.id.diceCountPicker1); 
     npicker.setMaxValue(100); 
     npicker.setMinValue(0); 

     npicker.setOnValueChangedListener(new OnValueChangeListener() { 
      @Override 
      public void onValueChange(NumberPicker picker, int oldVal, 
        int newVal) { 
       // Conditions for Enable/Disable picker     
       if (newVal == 0) { 
        picker.setEnabled(false); 
       } else if (oldVal == 0) { 
        picker.setEnabled(true); 
       } 
      } 
     }); 

它适用于我,它根据添加条件的启用/禁用正常运行。

谢谢。

+0

这不是我正在做的。我有一个NumberPicker上的Listener,它禁用了其他几个NumberPickers。与我的代码相比,我看不出有什么不同。 – Utoxin

+0

我会猜测你在Honeycomb或ICS中测试过它吗? – Utoxin

在NumberPicker和DatePicker中设置android:enabled="false" xml布局不会使Android 4.0.4设备上的控件变灰。然而,通过编程setEnabled(false)按预期工作。