上篇文章介绍如何在settings中增加一个新模块,那如何隐藏一个已经存在的模块呢?
2017-02-23 11:36
525 查看
你也许会说,这简单,我直接在xml/dash_category.xml里删掉或注释掉就好了,但还有一种情况,就是万一这个模块,在其他代码中使用了其中的id,现在你注释或删除此块代码,牵一发而动全身,总不能把所有用到此id的代码都注释掉吧。
接下来告诉你一种隐藏方式,不难,但你自己找也要费点劲的。
要想隐藏掉某个模块,你还是要从它的整个模块加载流程入手,为什么我布局放到那就能好是,它的fragment层级机构是什么样子的,为什么我点击一下直接可以掉转到我想要的fragment 界面去。它首先通过一下方法加载并部署该dashboradcagegory
SettingsActivity.java
categories) { hljs avrasm">1079 categories.clear(); 1080 loadCategoriesFromResource(R.xml.dashboard_categories, categories); 1081 updateTilesList(categories); 1082 }
先调用loadCagegoriesFromResource加载该布局
然后有个updateTilesList(categories);的过程,接下来我们关注这个点
target) { hljs objectivec">1235 final boolean showDev = mDevelopmentPreferences.getBoolean( 1236 DevelopmentSettings.PREF_SHOW, 1237 android.os.Build.TYPE.equals("eng")); 1238 1239 final UserManager um = (UserManager) getSystemService(Context.USER_SERVICE); 1240 1241 final int size = target.size(); 1242 for (int i = 0; i < size; i+ 4000 +) { 1243 1244 DashboardCategory category = target.get(i); 1245 1246 // Ids are integers, so downcasting is ok 1247 int id = (int) category.id; 1248 int n = category.getTilesCount() - 1; 1249 while (n >= 0) { 1250 1251 DashboardTile tile = category.getTile(n); 1252 boolean removeTile = false; 1253 id = (int) tile.id; 1254 if (id == R.id.operator_settings || id == R.id.manufacturer_settings) { 1255 if (!Utils.updateTileToSpecificActivityFromMetaDataOrRemove(this, tile)) { 1256 removeTile = true; 1257 } 1258 } else if (id == R.id.wifi_settings) { 1259 // Remove WiFi Settings if WiFi service is not available. 1260 if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI)) { 1261 removeTile = true; 1262 } 1263 } else if (id == R.id.bluetooth_settings) { 1264 // Remove Bluetooth Settings if Bluetooth service is not available. 1265 if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)) { 1266 removeTile = true; 1267 } 1268 } else if (id == R.id.data_usage_settings) { 1269 // Remove data usage when kernel module not enabled 1270 final INetworkManagementService netManager = INetworkManagementService.Stub 1271 .asInterface(ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE)); ............................. } else if (id == R.id.privacy_settings) { 1301 removeTile = true; 1302 } else if (id == R.id.apps_compatibility_settings) { 1303 removeTile = true; 1304 } else if (id == R.id.jabol_settings) { 1305 removeTile = true;
里边有个判断,如果是这个Id,我们对removeTile有个赋值操作,为true则表示在Settings的布局不再显示该条目,达到隐藏的目的。
具体实现机理,有兴趣的可以子先研究下Settings里边的布局加载过程。
相关文章推荐
- MapXtreme2005中如何将一个已经存在的表索引化成为一个本地的表?
- 如何向已经安装好的apache添加一个模块
- 如何加入一个已经存在的sf.net项目
- 如何件一个已经存在的项目推送到新建的版本库中
- 如何给一个已经存在的表添加id(唯一标识符)
- eclipse如何打开一个存在的工程。我的工程已经eclipse的workspace下
- 如何判断数据库中1个表已经存在,这样不会重复创建一个新表(用sql语句)
- 如何为SugarCRM任何模块的快捷操作栏增加一个公共按钮?
- iOS 如何在一个已经存在多个project的workspace中引入cocoapods管理第三方类库
- 如何向已经安装好的apache添加一个模块
- 看了一篇介绍如何自定义datagridview列的文章,写了一个可输入的combobox列
- Android如何使用SQLiteOpenHelper在已经存在的数据库中插入一个字段
- python在不同层级目录import模块的方法 作者:运维之路 字体:[增加 减小] 类型:转载 时间:2016-01-31 我要评论 这篇文章主要介绍了python 在不同层级目录import
- Android GridView 中如何实现item合并,类似于桌面的应用图标效果,长按拖动,加入到另外一个已经存在的文件夹中,或者是压在另一个图标上,行成新的
- 如何用extjs显示一个已经存在的页面
- 如何保证IO重定向不会破坏一个已经存在的文件
- 如何直接维护一个已经存在的透明表(转账表)
- 如何向已经安装好的apache添加一个模块 (纯转载)
- sqlite3如何判断一个表是否已经存在于数据库中c++