NumberPicker在禁用时不会变灰

时间:2012-12-18 05:16:27

标签: android android-widget

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

它仍然可以正确地禁用输入,但它无法使值变灰,使其看起来仍然启用。这是有意的吗?我做错了吗?

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

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

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

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

编辑2:

我在模拟器中对此进行了测试,并确认在Jellybean(4.1)之前该问题不存在。它在ICS中正常工作。那......很烦人。但我现在可以忍受它了。我将把它留给可能的方法来解决这个bug,但它看起来像一个真正的bug,我怀疑它可以修复。

3 个答案:

答案 0 :(得分:2)

嗯,由于没有其他反馈意见,我将继续关闭它。这就是我所知道的:

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

答案 1 :(得分:0)

尝试这种方式。

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

对我来说效果很好,并且根据添加的条件,启用/禁用表现正常。

感谢。

答案 2 :(得分:0)

在NumberPicker和DatePicker xml布局中设置android:enabled="false"并不会在Android 4.0.4设备上为我设置灰色控件。但是,通过setEnabled(false)以编程方式执行此操作可以正常工作。