隐藏部分不需要的布局不需要去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++;
}
}
}