需求:在settings的页面中写一个SwitchPreference(一个开关)来控制一级菜单的显示和隐藏
修改前:
修改后:
打开声音的开关后,动态显示了“声音”这个一级菜单。
packages/apps/Settings/src/com/android/settings/homepage/TopLevelSettings.java
//每次回到主页面,也就是回到一级菜单,就会回调TopLevelSettings这个类
private static final String KEY_SOUND = "top_level_sound";
@Override
public void onResume() {
//这个showSound开关请自行控制
boolean showSound = true;
if (showSound) {
//显示
if (getPreferenceScreen().findPreference(KEY_SOUND) != null){
//已经显示出来了,不做其他动作
}else {
//被隐藏了,将其添加到PreferenceScreen上
//添加的这些信息和xml中写的一样
PreferenceScreen preferenceScreen = getPreferenceScreen();
Preference mSoundPreference = new Preference(getContext());
mSoundPreference.setEnabled(true);
mSoundPreference.setKey(KEY_SOUND);
mSoundPreference.setSummary(getContext().getResources().getString(R.string.sound_dashboard_summary));
mSoundPreference.setTitle(getContext().getResources().getString(R.string.sound_settings));
mSoundPreference.setIcon(getContext().getResources().getDrawable(R.drawable.ic_homepage_sound));
mSoundPreference.setOrder(-70);
mSoundPreference.setFragment("com.android.settings.notification.SoundSettings");
preferenceScreen.addPreference(mSoundPreference);
}
}else{
//移除
if (getPreferenceScreen().findPreference(KEY_SOUND) != null){
getPreferenceScreen().removePreference(findPreference(KEY_SOUND));
}
}
super.onResume();
}
packages/apps/Settings/res/xml/top_level_settings.xml
<Preference
android:key="top_level_sound"
android:title="@string/sound_settings"
android:summary="@string/sound_dashboard_summary"
android:icon="@drawable/ic_homepage_sound"
android:order="-70"
android:fragment="com.android.settings.notification.SoundSettings"/>
完毕~