您的位置:首页 > 移动开发 > Android开发

Android N隐藏Settings的菜单

2018-03-07 15:58 537 查看

隐藏一个一级菜单

我们只需要修改AndroidManifest.xml即可

这里以Sound为例子,我们先找到SoundSettingsActivity定义的位置

<activity android:name="Settings$SoundSettingsActivity"
android:label="@string/sound_settings"
android:icon="@drawable/ic_settings_sound"
android:taskAffinity=""
android:exported="true">
......
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.VOICE_LAUNCH" />
<category android:name="com.android.settings.SHORTCUT" />
</intent-filter>
<!-- Settings就是根据这里控制是否在一级菜单显示,以及定义优先级,越大优先级越高,菜单越靠前。
<intent-filter android:priority="7">
<action android:name="com.android.settings.action.SETTINGS" />
</intent-filter>-->
......
</activity>


隐藏一个二级菜单

一般隐藏一个二级菜单找到Preferences对应的xml即可

这里以Display -> screen server为例子

public class DisplaySettings extends SettingsPreferenceFragment implements
Preference.OnPreferenceChangeListener, Indexable {
private static final String TAG = "DisplaySettings";
......

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Activity activity = getActivity();
final ContentResolver resolver = activity.getContentResolver();

//这里告诉我们用的是哪个xml
addPreferencesFromResource(R.xml.display_settings);
......
}
}


display_settings.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
android:title="@string/display_settings"
settings:keywords="@string/keywords_display">
......
<!-- 注释掉这里就不会显示screensaver这个菜单项
<PreferenceScreen
android:key="screensaver"
android:title="@string/screensaver_settings_title"
android:fragment="com.android.settings.DreamSettings" />
-->
......
</PreferenceScreen>


以上可见,Android在Settings的设计上还是倾向于可配置,基本不需要修改代码,即可完成隐藏(添加)的需求。但是并不是绝对的不需要修改代码,有些时候因为隐藏的原因,会出现NullPointException,这时还是需要修改代码的。

走过路过,点个赞哟。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: