我的布局中有一个 TimePicker。我需要通过单击按钮或事件来禁用 TimePicker(用户无法更改小时或分钟)。
我怎样才能禁用它?
下面的代码片段不起作用
TimePicker tp = (...)findViewById(...);
for(int i = 0; i< tp.getChildCount(); i++)
((View)tp.getChildAt(i)).setEnabled(false);
我的布局中有一个 TimePicker。我需要通过单击按钮或事件来禁用 TimePicker(用户无法更改小时或分钟)。
我怎样才能禁用它?
下面的代码片段不起作用
TimePicker tp = (...)findViewById(...);
for(int i = 0; i< tp.getChildCount(); i++)
((View)tp.getChildAt(i)).setEnabled(false);
这无论如何都不是一个好主意,但如果TimePicker.setEnabled(false)
不起作用,您可以尝试递归禁用;
private void disable(ViewGroup vg)
{
for (int i = 0; i < vg.getChildCount(); ++i)
{
View v = vg.getChildAt(i);
if (v instanceof ViewGroup)
{
disable((ViewGroup)v);
}
else
{
v.setEnabled(false);
}
}
}
只需将 TimePicker 传递给此方法。
sButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (sButton.isChecked()) {
timePicker.setEnabled(true);
timePicker.setIs24HourView(true);
displayTime.setText(currentTime());
changeTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
displayTime.setText(currentTime());
}
});
} else {
timePicker.setEnabled(false);
}
}
});
我找到了解决方案:
for(int i = 0; i < timePickerStartingHour.getChildCount(); i++) {
Log.i("MyApp", timePickerStartingHour.getChildAt(i).getClass().getName()); //prints LinearLayout
for (int j = 0; j < ((LinearLayout)timePickerStartingHour.getChildAt(i)).getChildCount(); j++ ) {
((LinearLayout)timePickerStartingHour.getChildAt(i)).getChildAt(j).setEnabled(false);
}
}
TimePicker 只有一个子元素,它是 LinearLayout,所以你不能禁用它,你必须禁用 LinearLayout 内的视图