一、设置Preference置灰显示
使Preference置灰显示,不能点击。先调用Preference的setEnabled(false),再调用setShouldDisableView(true);
如果使置灰项恢复正常可点击,可调用setEnabled(true)。
public void setEnabled(boolean flag){
if (flag){
mPreference.setEnabled(true);
}else {
mPreference.setEnabled(false);
mPreference.setShouldDisableView(true);
}
}
实际使用中,在Settings中一般也可以通过同一页面的Preference来控制其他Preference。
二、举个栗子:
需求:需要在第一个switchButton关闭时,对第二个switchButton进行置灰不能点击;
1、在 buildPreferenceControllers时,把第一个switchButton的对象作为参数传进第二个switchButton的构造器。
private static List<AbstractPreferenceController> buildPreferenceControllers(
Context context, Lifecycle lifecycle) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
//第一个swithButton
StatusBarSlidePreferenceController statusbarslide = new StatusBarSlidePreferenceController(context);
//第二个swithButton
StatusBarShowPreferenceController statusbarshow = new StatusBarShowPreferenceController(context,statusbarslide);
controllers.add(statusbarshow);
controllers.add(statusbarslide);
return controllers;
}
2、在第二个switchButton中添加方法setEnable(boolean flag);
RestrictedSwitchPreference mPreference;
public void setEnabled(boolean flag){
if (flag){
mPreference.setEnabled(true);
}else {
mPreference.setEnabled(false);
mPreference.setShouldDisableView(true);
}
}
3、在第一个switchButton中调用方法setEnable(boolean flag);
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean autoEnabled = (Boolean) newValue;
if (autoEnabled){
statusBarSlidePreferenceController.setEnabled(true);
}else {
statusBarSlidePreferenceController.setEnabled(false);
}
return true;
}
当然了,需要在构造器中处理一下传入的参数。不做赘述。
三、总结
至此,完成对Preference置灰显示控制。