天天看點

android修改settings源碼隐藏部分布局

隐藏部分不需要的布局不需要去settings_headers.xml裡去掉布局。這樣會報異常。

我們在settings.java檔案的updateHeaderList(List<Header> target) 方法裡修改即可。

找到對應的id,把不需要的都移除掉。

private void updateHeaderList(List<Header> target) {

        final boolean showDev = mDevelopmentPreferences.getBoolean(

                DevelopmentSettings.PREF_SHOW,

                android.os.Build.TYPE.equals("eng"));

        int i = 0;

        mHeaderIndexMap.clear();

        while (i < target.size()) {

        Header header = target.get(i);

       // Ids are integers, so downcasting

       int id = (int) header.id;

     //start modify by longqiong on 2014.12.08

       if (id == R.id.operator_settings || id == R.id.manufacturer_settings) {

           Utils.updateHeaderToSpecificActivityFromMetaDataOrRemove(this, target, header);

       } else if (id == R.id.wifi_settings) {

           // Remove WiFi Settings if WiFi service is not available.

           if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI)) {

               target.remove(i);

           }

       } else if (id == R.id.bluetooth_settings) {

           // Remove Bluetooth Settings if Bluetooth service is not available.

               target.remove(i);

       } else if (id == R.id.data_usage_settings) {

           // Remove data usage when kernel module not enabled

              target.remove(i);

       } else if (id == R.id.battery_settings) {

           // Remove battery settings when battery is not available. (e.g. TV)

               target.remove(i);

       } else if (id == R.id.account_settings) {

        target.remove(i);

       } else if (id == R.id.home_settings) {

               target.remove(i);

       } else if (id == R.id.user_settings) {

               target.remove(i);

       } else if (id == R.id.nfc_payment_settings) {

               target.remove(i);

       } else if (id == R.id.development_settings) {

               target.remove(i);

       } else if (id == R.id.account_add) {

               target.remove(i);

       } else if(id == R.id.print_settings){

        target.remove(i);

       }

       if (i < target.size() && target.get(i) == header

               && UserHandle.MU_ENABLED && UserHandle.myUserId() != 0

               && !ArrayUtils.contains(SETTINGS_FOR_RESTRICTED, id)) {

           target.remove(i);

       }

       if(i < target.size()){

           if(id == R.id.wireless_section 

            ||  id == R.id.bluetooth_settings

            ||  id == R.id.data_usage_settings

            ||  id == R.id.operator_settings

            ||  id == R.id.device_section

            ||  id == R.id.storage_settings

            ||  id == R.id.battery_settings

            ||  id == R.id.user_settings

            ){

            Log.e("long", "title = " + target.get(i).getTitle(getResources()));

            target.remove(i);

           }

       }

       //end modify by longqiong  

       // Increment if the current one wasn't removed by the Utils code.

       if (i < target.size() && target.get(i) == header) {

           // Hold on to the first header, when we need to reset to the top-level

           if (mFirstHeader == null &&

                   HeaderAdapter.getHeaderType(header) != HeaderAdapter.HEADER_TYPE_CATEGORY) {

               mFirstHeader = header;

           }

           mHeaderIndexMap.put(id, i);

           i++;

       }

        }

    }