Android7.0 Settings主菜单添加一条item
来源:互联网 发布:php 工作环境 编辑:程序博客网 时间:2024/05/16 08:47
往Android7.0的settings的主菜单里添加一条item. N与M的Settings不同,在M上只要找到Settings里面的相应的布局添加就好,但在N上由于Setting里面的item不再受布局控制,所以得在代码中添加.
找到/packages/apps/Settings/src/com/android/settings/SettingsActivity.java
在settingsActivity.java里面的private void doUpdateTilesList() {}添加代码才会显示在Settings的item里面,具体如下:
private void doUpdateTilesList() {//add startsetTileEnabled(new ComponentName(packageName,Settings.WtkSecurityLockersActivity.class.getName()),getResources().getBoolean(R.bool.show_security_lock), isAdmin, pm);//add end}
这里添加了这段代码之后就可以显示在settings的item里面了,具体还有以下的一些完善:在SettingsActivity.java里面的
private String[] SETTINGS_FOR_RESTRICTED = {//add startSettings.WtkSecurityLockersActivity.class.getName(),//add end };private static final String[] ENTRY_FRAGMENTS = {//add startWtkSecurityLockers.class.getName(),//add end };packages/apps/Settings/src/com/android/settings/Settings.java里面加public static class WtkSecurityLockersActivity extends SettingsActivity { /* empty */ }packages/apps/Settings/AndroidManifest.xml里面加:<!--add (start)--> <!-- A: WtkSecurityLockers Settings --> <activity android:name="Settings$WtkSecurityLockersActivity" android:label="@string/security_locker" android:icon="@drawable/ic_wtk_securitylocker"> <intent-filter android:priority="4"> <action android:name="com.android.settings.action.SETTINGS" /> </intent-filter> <meta-data android:name="com.android.settings.category" android:value="com.android.settings.category.system" /> <meta-data android:name="com.android.settings.FRAGMENT_CLASS" android:value="com.android.settings.WtkSecurityLockers" /> <meta-data android:name="com.android.settings.title" android:resource="@string/security_locker" /> <meta-data android:name="com.android.settings.icon" android:resource="@drawable/ic_wtk_securitylocker" /> </activity> <!-- A: WtkSecurityLockers Settings --> <!--add (end)-->packages/apps/Settings/src/com/android/settings/下面添加一个类:package com.android.settings;import com.android.settings.R;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.support.v7.preference.Preference;import android.support.v7.preference.PreferenceScreen;import android.support.v14.preference.SwitchPreference;import android.util.Log;import android.os.SystemProperties;import android.provider.Settings;import com.android.internal.logging.MetricsProto.MetricsEvent;public class WtkSecurityLockers extends SettingsPreferenceFragment implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener{ private static final String KEY_SECURITY_LOCKER = "security_lockers"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e("lcg","KEY_SECURITY_LOCKER = "+KEY_SECURITY_LOCKER); Intent intent = new Intent().setClassName("com.wtk.wtksecuritylocker", "com.wtk.wtksecuritylocker.LockerListActivity"); intent.putExtra(KEY_SECURITY_LOCKER,true); startActivity(intent); getActivity().finish(); } @Override public void onResume() { super.onResume(); } @Override public boolean onPreferenceClick(Preference preference) { // TODO Auto-generated method stub return false; } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { // TODO Auto-generated method stub return false; } @Override public boolean onPreferenceTreeClick(Preference preference) { // TODO Auto-generated method stub return super.onPreferenceTreeClick(preference); } @Override protected int getMetricsCategory() { // TODO Auto-generated method stub return MetricsEvent.DEVICEINFO_STORAGE; }}
至此就可以在Settings里面的主菜单界面添加一个item,点击该item就会进入我们想进的界面.
附上:packages/apps/Settings/src/com/android/settings/SettingsActivity.java
private void setTileEnabled(ComponentName component, boolean enabled, boolean isAdmin, PackageManager pm) { if (UserHandle.MU_ENABLED && !isAdmin && getPackageName().equals(component.getPackageName()) && !ArrayUtils.contains(SETTINGS_FOR_RESTRICTED, component.getClassName())) { enabled = false; } setTileEnabled(component, enabled); }frameworks\base\packages\SettingsLib\src\com\android\settingslib\drawer\SettingsDrawerActivity.java里面public void setTileEnabled(ComponentName component, boolean enabled) { PackageManager pm = getPackageManager(); int state = pm.getComponentEnabledSetting(component); boolean isEnabled = state == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;if (isEnabled != enabled || state == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) { if (enabled) { sTileBlacklist.remove(component); } else { sTileBlacklist.add(component); } pm.setComponentEnabledSetting(component, enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); new CategoriesUpdater().execute(); } }
由此可见往Android7.0的Settingsk里添加item不需要布局,至于为什么,还有待继续研究.
阅读全文
3 0
- Android7.0 Settings主菜单添加一条item
- Android7.0 Settings主菜单添加一条item
- Android7.0 添加快速设定Quick Settings Tile
- android7.0 settings问题汇总
- DISCUZ后台添加主菜单的方法
- Android7.0 & 8.0 Language Settings 定制
- Android7.0 Settings 源码剖析-系列列表
- Android7.0 & 8.0 Language Settings 定制
- Android7.0 Settings 源码剖析一——Settings概括
- 如何在ie主菜单里添加顶部菜单项
- Drupal7如何将分类添加到主菜单
- Gnome desktop主菜单中添加自己的菜单栏
- MFC : 给主菜单动态添加删除一级子菜单
- Android7.0 添加自定义SystemService
- Android7.0 添加新字体
- 创建主菜单系统
- 扩展Delphi主菜单
- Fiddler2 主菜单
- java基础汇总
- 如何用MAT分析Android应用内存泄露
- ES6入门学习资源共享
- 路由表选择算法
- as开启混淆时自己出现的问题,及解决
- Android7.0 Settings主菜单添加一条item
- 图片上传之blob对象预览
- 微信小程序 不同的移动设备上应该如何设置rpx单位?
- MVC中HtmlHelper用法
- GSMS六合一软件(U盘版)ISO文件下载
- 局域网设备发现之Bonjour协议
- cdn技术
- Animation动画——ObjectAnimator基本使用
- Android:adb通过app_process调用java类报错-java.lang.ClassNotFoundException