android setting.apk 界面中删除某个菜单选项

那么有哪些多余的东西呢?比如在主菜单中的“设置/呼叫”,“设置/辅助”功能选项,“设置/关于手机/XX”功能选项,“设置/显示/XX”功能选项。本人的手机是HTC g6,android 2.2 内核2.6.32.17。下面所截的图是我手机上的图,我们公司用的是android 2.3,现在在弄4.0版本。相对与我手机的2.2,投影机的2.3版本差别不大。
android setting.apk 界面中删除某个菜单选项 - dwqqwdpl3000 - 律云川android setting.apk 界面中删除某个菜单选项 - dwqqwdpl3000 - 律云川   
android setting.apk 界面中删除某个菜单选项 - dwqqwdpl3000 - 律云川android setting.apk 界面中删除某个菜单选项 - dwqqwdpl3000 - 律云川 
                                      界面修改图
    那么怎么去掉这些选项呢?首先还得看代码,找到代码是关键。
android setting.apk 界面中删除某个菜单选项 - dwqqwdpl3000 - 律云川
    代码一般在package/apps/Settings/下,看上图的文件与文件夹,我们只需关心res 与 src 这两个文件夹里面的内容,前者是资源文件目录,后者是源代码也就是java源代码的目录。 先看下主界面是如何出现的,在src/com/android/settings/中找到Settings.java,可以看到程序就那么几行。

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);         addPreferencesFromResource(R.xml.settings);         int activePhoneType = TelephonyManager.getDefault().getPhoneType();

......

就是这句代码了,addPreferencesFromResource(R.xml.settings);它调用的界面布局文件R.xml.settings。好吧,继续找。R可以认为它是res文件夹,它是自动生成的,不管它。在res/xml/中我们发现settings.xml,代码如下。它与设置主界面一一对应。

<?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2008 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License.      You may obtain a copy of the License at             http://www.apache.org/licenses/LICENSE-2.0        Unless required by applicable law or agreed to in writing, software      distributed under the License is distributed on an "AS IS" BASIS,      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.      See the License for the specific language governing permissions and      limitations under the License. -->

<PreferenceScreen     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"     android:title="@string/settings_label"     android:key="parent">

        <com.android.settings.IconPreferenceScreen             android:title="@string/radio_controls_title"             settings:icon="@drawable/ic_settings_wireless">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.settings"                 android:targetClass="com.android.settings.WirelessSettings" />         </com.android.settings.IconPreferenceScreen> <!--         <com.android.settings.IconPreferenceScreen             android:key="call_settings"             settings:icon="@drawable/ic_settings_call"             android:title="@string/call_settings_title">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.phone"                 android:targetClass="com.android.phone.CallFeaturesSetting" />         </com.android.settings.IconPreferenceScreen> -->         <!-- Sound -->

        <com.android.settings.IconPreferenceScreen             settings:icon="@drawable/ic_settings_sound"             android:title="@string/sound_settings_title">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.settings"                 android:targetClass="com.android.settings.SoundSettings" />         </com.android.settings.IconPreferenceScreen>

        <!-- Display -->

        <com.android.settings.IconPreferenceScreen             settings:icon="@drawable/ic_settings_display"             android:title="@string/display_settings_title">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.settings"                 android:targetClass="com.android.settings.DisplaySettings" />         </com.android.settings.IconPreferenceScreen>   

  <!-- HDMI Setting --> <!--         <com.android.settings.IconPreferenceScreen    android:key="hdmi_config_settings"             settings:icon="@drawable/ic_settings_hdmi"             android:title="@string/hdmi_settings_title">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.settings"                 android:targetClass="com.android.settings.HdmiSettings" />         </com.android.settings.IconPreferenceScreen> -->

        <!-- Security & Location -->

        <com.android.settings.IconPreferenceScreen             settings:icon="@drawable/ic_settings_security"             android:title="@string/security_settings_title"             android:key="security_settings">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.settings"                 android:targetClass="com.android.settings.SecuritySettings" />         </com.android.settings.IconPreferenceScreen>

        <!-- Application Settings -->

        <com.android.settings.IconPreferenceScreen             settings:icon="@drawable/ic_settings_applications"             android:title="@string/applications_settings"             android:key="applications_settings">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.settings"                 android:targetClass="com.android.settings.ApplicationSettings" />         </com.android.settings.IconPreferenceScreen>

        <!-- Data Sync. The settings activity will ensure this is resolved to an              activity on the system image, otherwise it will remove this              preference. -->

        <com.android.settings.IconPreferenceScreen             settings:icon="@drawable/ic_settings_sync"             android:title="@string/sync_settings"             android:key="sync_settings">             <intent android:action="android.settings.SYNC_SETTINGS" />         </com.android.settings.IconPreferenceScreen>

        <!-- Privacy -->

        <com.android.settings.IconPreferenceScreen             settings:icon="@drawable/ic_settings_privacy"             android:title="@string/privacy_settings"             android:key="privacy_settings">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.settings"                 android:targetClass="com.android.settings.PrivacySettings" />         </com.android.settings.IconPreferenceScreen>

        <!-- Storage -->

        <com.android.settings.IconPreferenceScreen             settings:icon="@drawable/ic_settings_storage"             android:title="@string/storage_settings">             <intent android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.settings"                 android:targetClass="com.android.settings.deviceinfo.Memory" />         </com.android.settings.IconPreferenceScreen>

        <!-- Language -->

        <com.android.settings.IconPreferenceScreen             settings:icon="@drawable/ic_settings_language"             android:title="@string/language_settings">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.settings"                 android:targetClass="com.android.settings.LanguageSettings" />         </com.android.settings.IconPreferenceScreen>

        <!-- Voice input & output -->

        <com.android.settings.IconPreferenceScreen             settings:icon="@drawable/ic_settings_speech"             android:title="@string/voice_input_output_settings">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.settings"                 android:targetClass="com.android.settings.VoiceInputOutputSettings" />         </com.android.settings.IconPreferenceScreen>

        <!-- Accessibility feedback --> <!--         <com.android.settings.IconPreferenceScreen             settings:icon="@drawable/ic_settings_accessibility"             android:title="@string/accessibility_settings">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.settings"                 android:targetClass="com.android.settings.AccessibilitySettings" />         </com.android.settings.IconPreferenceScreen> -->         <!-- Dock -->

        <com.android.settings.IconPreferenceScreen             android:key="dock_settings"             settings:icon="@drawable/ic_settings_dock"             android:title="@string/dock_settings">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.settings"                 android:targetClass="com.android.settings.DockSettings" />         </com.android.settings.IconPreferenceScreen>

        <!-- Date & Time -->

        <com.android.settings.IconPreferenceScreen             settings:icon="@drawable/ic_settings_date_time"             android:title="@string/date_and_time_settings_title">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.settings"                 android:targetClass="com.android.settings.DateTimeSettings" />         </com.android.settings.IconPreferenceScreen>

 

        <!-- About Device -->

        <com.android.settings.IconPreferenceScreen             settings:icon="@drawable/ic_settings_about"             android:title="@string/about_settings">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.settings"                 android:targetClass="com.android.settings.DeviceInfoSettings" />         </com.android.settings.IconPreferenceScreen>

</PreferenceScreen>

    boss叫我去掉通话。在下面代码前后加上<!--   --> 注释掉,编译,烧写,测试,没问题,通话去掉了。

<!--

<com.android.settings.IconPreferenceScreen             android:key="call_settings"             settings:icon="@drawable/ic_settings_call"             android:title="@string/call_settings_title">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.phone"                 android:targetClass="com.android.phone.CallFeaturesSetting" />         </com.android.settings.IconPreferenceScreen> -->

    辅助功能也按同样方法去掉。
    在关于手机中去掉一些选项,此时我们仅仅需要去掉子菜单里的选项,所以要有些区别。在Settings.xml中我们看到最后部分。

<!-- About Device -->

        <com.android.settings.IconPreferenceScreen             settings:icon="@drawable/ic_settings_about"             android:title="@string/about_settings">             <intent                 android:action="android.intent.action.MAIN"                 android:targetPackage="com.android.settings"                 android:targetClass="com.android.settings.DeviceInfoSettings" />         </com.android.settings.IconPreferenceScreen>


他与intent 机制有关,可以把它当做一个任务,如果只是修改界面娱乐不需暂且不管,看到android:targetClass="com.android.settings.DeviceInfoSettings"这句,把它当做调用语句,调用com.android.settings.DeviceInfoSettings这个文件里的代码。找到\src\com\android\settings\eviceInfoSettings.java中的看看代码中有什么东西。同样可以看到有如下:
又有类似的方法,addPreferencesFromResource(R.xml.device_info_settings);界面布局文件也跟进看看。

    @Override     protected void onCreate(Bundle icicle) {         super.onCreate(icicle);

        addPreferencesFromResource(R.xml.device_info_settings);

......

可以发现该界面布局是静态布局方式,用到与持久化数据有关的Preference,不过不管它,直接加注释同样去掉即可。

<?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2008 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");      you may not use this file except in compliance with the License.      You may obtain a copy of the License at             http://www.apache.org/licenses/LICENSE-2.0        Unless required by applicable law or agreed to in writing, software      distributed under the License is distributed on an "AS IS" BASIS,      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.      See the License for the specific language governing permissions and      limitations under the License. -->

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"         android:title="@string/about_settings">

        <!-- System update settings - launches activity -->         <PreferenceScreen android:key="system_update_settings"                 android:title="@string/system_update_settings_list_item_title"                 android:summary="@string/system_update_settings_list_item_summary">             <intent android:action="android.settings.SYSTEM_UPDATE_SETTINGS" />         </PreferenceScreen>                 <!-- Device status - launches activity --> <!--         <PreferenceScreen android:key="status_info"                 android:title="@string/device_status"                 android:summary="@string/device_status_summary">             <intent android:action="android.intent.action.MAIN"                     android:targetPackage="com.android.settings"                     android:targetClass="com.android.settings.deviceinfo.Status" />         </PreferenceScreen> --> <!--                <PreferenceScreen                 android:key="power_usage"                 android:title="@string/power_usage_summary_title"                 android:summary="@string/power_usage_summary">             <intent android:action="android.intent.action.MAIN"                     android:targetPackage="com.android.settings"                     android:targetClass="com.android.settings.fuelgauge.PowerUsageSummary" />         </PreferenceScreen> -->       ......

然后试着去掉“设置/显示/中的自动旋转屏幕”,同样方法加注释,不过编译,烧写,运行后出现“...很抱歉,应用程序意外停止,请重试..."类似的字眼,很显然代码注释后有关联的代码没去掉,也就是没去干净。查看java源码。android:targetClass="com.android.settings.DisplaySettings" 去掉相关代码如下所示。
 

@@ -74,8 +74,8 @@ public class DisplaySettings extends PreferenceActivity implements            mAnimations = (ListPreference) findPreference(KEY_ANIMATIONS);          mAnimations.setOnPreferenceChangeListener(this); -        mAccelerometer = (CheckBoxPreference)findPreference(KEY_ACCELEROMETER); -        mAccelerometer.setPersistent(false); +        //mAccelerometer = (CheckBoxPreference)findPreference(KEY_ACCELEROMETER); +        //mAccelerometer.setPersistent(false);          HdmiState = new File("/sys/class/hdmi/hdmi-0/state");            ListPreference screenTimeoutPreference = @@ -174,9 +174,9 @@ public class DisplaySettings extends PreferenceActivity implements          }          mAnimations.setValueIndex(idx);          updateAnimationsSummary(mAnimations.getValue()); -        mAccelerometer.setChecked(Settings.System.getInt( -                getContentResolver(), -                Settings.System.ACCELEROMETER_ROTATION, 0) != 0); +        //mAccelerometer.setChecked(Settings.System.getInt( +                //getContentResolver(), +                //Settings.System.ACCELEROMETER_ROTATION, 0) != 0);      }

这样修改便能通过了,不会出现错误了。其实可以用adb调试查看代码出错的地方,非常快速定位错误点。每个人出现问题的方面不同,用adb调试是非常好的选择。
这篇文章是转载的,可以解决大部分我对settings的设置要求了,推荐!
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值