android 隐藏Settings菜单的几种方法

本文详细介绍了如何在MTK6.0系统中定制Settings应用的菜单,包括隐藏一级菜单、二级菜单及整个组的方法。通过修改源码和资源文件,可以灵活调整系统设置界面,满足特定需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文修改基于mtk6.0系统

隐藏一个一级菜单

  • 源码位置 packages/apps/Settings/src/com/android/settings/SettingsActivity.java;
 private int[] SETTINGS_FOR_RESTRICTED = {
             R.id.wireless_section,
             R.id.wifi_settings,
             R.id.bluetooth_settings,
             R.id.location_settings,
             R.id.security_settings,    
             ...              	
 };

例如隐藏位置项
①修改updateTilesList()方法,添加:

private void updateTilesList(List<DashboardCategory> target) {
    ....
 // Ids are integers, so downcasting is ok
    int id = (int) category.id;
    int n = category.getTilesCount() - 1;
    while (n >= 0) {
       ....
       } else if (id == R.id.location_settings) {
         removeTile=true;
       }
       ....
       if (removeTile && n < category.getTilesCount()) {
           category.removeTile(n);  //移除
       }
       n--;
    }

当removeTile = true时,这个tile所在组会将此tile移除。
②直接注释packages/apps/Settings/res/xml/dashboard_categories.xml中关于位置项

+  <!-- Location -->
   <dashboard-tile
         android:id="@+id/location_settings"
         android:title="@string/location_settings_title"
         android:fragment="com.android.settings.location.LocationSettings"    	 
         android:icon="@drawable/ic_settings_location"
    />
+  -->

mainifest中关于LocationSettings的也要注释掉。

隐藏一个二级菜单

①可直接找到所在xml文件,直接注释

  <PreferenceCategory android:key="device_admin_category"
             android:title="@string/device_admin_title"
             android:persistent="false">

         <Preference android:key="manage_device_admin"
                 android:title="@string/manage_device_admin"
                 android:summary="@string/manage_device_admin_summary"
                 android:persistent="false"
                 android:fragment="com.android.settings.DeviceAdminSettings"/>

+  <!--       <SwitchPreference android:key="toggle_install_applications_validation"
                 android:title="@string/install_validation"
                 android:summaryOn="@string/install_unknown_applications_validation"
                 android:summaryOff="@string/install_unknown_applications_validation"
+                 android:persistent="false" />       -->   

         <SwitchPreference android:key="toggle_install_applications"
                 android:title="@string/install_applications"
                 android:summaryOff="@string/install_unknown_applications"
                 android:summaryOn="@string/install_unknown_applications"
                 android:persistent="false" />

     </PreferenceCategory>

②在代码中移除
deviceAdminCategory.removePreference(mToggleAppInstallationInvalidation);
deviceAdminCategory就是目标所在的PreferenceCategory 。

settings设置中直接移除整个组

如:无线和网络,设备,个人,系统。移除设备组为例

  • 源码位置 packages/apps/Settings/src/com/android/settings/SettingsActivity.java;
 public static void loadCategoriesFromResource(int resid, List<DashboardCategory> target,
             Context context) {
      XmlResourceParser parser = null;
      try {
           parser = context.getResources().getXml(resid);
           AttributeSet attrs = Xml.asAttributeSet(parser);

      int type;
      while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
                     && type != XmlPullParser.START_TAG) {
                 // Parse next until start tag is found
      }
          ...   // dashboard-categories.xml解析 
-
-                    target.add(category);
+                    if (category.key.equals("com.android.settings.category.device")) {
+                        
+                    }else {
+                        target.add(category);
+                    }
                 } else {
                     XmlUtils.skipCurrentTag(parser);
                 }    

你想隐藏哪个组,就不把它加入到List数组中。

  • 四个组所对应的key值在,donottranslate.xml中定义
   * <li>com.android.settings.category.wireless</li>
   * <li>com.android.settings.category.device</li>
   * <li>com.android.settings.category.personal</li>
   * <li>com.android.settings.category.system</li>

测试有效。
settings添加菜单项

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值