Settings 中新增item , 及全局搜索

Settings 中新增item , 及全局搜索

Android 系统应用开发时,会遇到需要在Settings中增加定制化item的需求 ,这里记录一下如何新增定制item

新增item 所需步骤


  1. 在AndroidManifest.xml增加相应配置
  2. Settings.java (com.android.settings)文件中添加相关配置
  3. SettingsActivity.java (com.android.settings)doUpdateTilesList()方法中,增加相关配置
  4. 创建点击item后需要跳转的fragment
  • 在AndroidManifemst.xml增加相应配置
<activitytest
            //TestSettingsActivity 需要在Settings(com.android.settings)中进行定义
            android:name="Settings$TestSettingsActivity"
            android:label="test" //新增条目title
            android:icon="@drawable/test" //新增条目所需图标
            android:taskAffinity="com.android.settings"
            android:parentActivityName="Settings">
            //优先级来确定显示位置 
            <intent-filter android:priority="-8">
                <action android:name="com.android.settings.action.SETTINGS"/>
            </intent-filter>
            //值设置为新页面的类别键        
            <meta-data android:name="com.android.settings.category"
                android:value="com.android.settings.category.ia.system"/>
            //设置主界面排序,网络和互联网默认-120,只要大于即可排到第一        
            <meta-data android:name="com.android.settings.order" android:value="8"/>
            //跳转到Fragment  fragment也需要在SettingsGateway进行定义
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.sprd.settings.TestFragment"/>
        </activity>
  • 定义Activity

    需要在Settings(com.android.settings)中进行定义, 即上面AndroidManifemst 中配置的TestSettingsActivity

public class Settings extends SettingsActivity {
    ...
        public static class TestSettingsActivity extends SettingsActivity { /* empty */ }
    ...    
}
  • SettingsActivity.java (com.android.settings)doUpdateTilesList()`方法中,增加相关配置
/**
  * Add for Smart Controls
   *@{
   */
        somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
                        Settings.TestSettingsActivity.class.getName()),
                 true /*false则隐藏,true显示*/, isAdmin)
                || somethingChanged;
  • 在SettingsGateway 中增加配置
 Settings.TestSettingsActivity.class.getName(),
  • **创建点击item后需要跳转的fragmen **
  1. 跳转的fragment也需要在 SettingsGateway.java(com.android.settings.core.gateway)中进行配置

      private String[] ENTRY_FRAGMENTS = {
          ...
          TestFragment.class.getName(),
          ...
      }
    
  1. 定义所需的fragment

    public class TestFragment extends DashboardFragment implements Indexable{
        private static final String TAG = "AicyDisplaySettings";
    
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
         
    
        }
    
      
        @Override
        public void onResume() {
            super.onResume();
           
        }
    
        @Override
        public int getMetricsCategory() {
            return SettingsEnums.LOCATION_SCANNING;
        }
       
        
       //Fragment 的对应布局
        @Override
        protected int getPreferenceScreenResId() {
            return R.xml.test_fragment
        }
    
        @Override
        protected String getLogTag() {
            return TAG;
        }
    
        /**
         * For Search.
         */
    
        public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
                new BaseSearchIndexProvider() {
                    @Override
                    public List<SearchIndexableResource> getXmlResourcesToIndex(
                            Context context, boolean enabled) {
                        ArrayList<SearchIndexableResource> result =
                                new ArrayList<SearchIndexableResource>();
    
                        SearchIndexableResource sir = new                       SearchIndexableResource(context);
                        sir.xmlResId = R.xml.test_fragment;
                        result.add(sir);
                        return result;
                    }
    
    
                };
    
    }
    
    

关于新增item的搜索


  • 需要Fragment 实现Indexable 接口重写 getXmlResourcesToIndex 方法 , 以上你面TestFragment 为例

    public class TestFragment extends DashboardFragment implements Indexable{
       
    
        /**
         * For Search.
         */
    
        public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
                new BaseSearchIndexProvider() {
                    @Override
                    public List<SearchIndexableResource> getXmlResourcesToIndex(
                            Context context, boolean enabled) {
                        ArrayList<SearchIndexableResource> result =
                                new ArrayList<SearchIndexableResource>();
    
                        SearchIndexableResource sir = new                          SearchIndexableResource(context);
                        sir.xmlResId = R.xml.test_fragment; //自己配置文件名称  
                        result.add(sir);
                        //该集合中包含了xml 中定义的所有控件
                        return result;
                    }
    
    
                };
                  //如果有不希望被搜索到的空间 在getNonIndexableKeys 中进行配置
                    @Override
                    public List<String> getNonIndexableKeys(Context context) {
                        final List<String> keys = super.getNonIndexableKeys(context);
                        //如test_fragment.xml 中的vibration_preference_screen 控件不希望被搜索到则将其添加到 List<String> keys 中即可 
                        keys.add("vibration_preference_screen");
                        return keys;
                    }
    
    }
    
    
  • 在SearchIndexableResources 进行配置

    public final class SearchIndexableResources {
        static {
            sResMap.put(AicyDisplaySettings.class.getName(),
                    new SearchIndexableResource(
                            0,
                            NO_DATA_RES_ID,
                            TestFragment.class.getName(),
                            -1));
        }
     }
    
  • 搜索只是重启无法生生效 , 需要切换一下语言才能生效
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 面试必背 会舍弃、总结概括——根据我这些年面试和看面试题搜集过来的知识点汇总而来 建议根据我的写的面试应对思路中的...
    luoyangzk阅读 6,743评论 6 173
  • // com.adobe.flash.listen settings.gradle 定义项目包含那些模块app.i...
    zeromemcpy阅读 1,604评论 0 1
  • 一、Java语言规范 详见:Android开发java编写规范 二、Android资源文件命名与使用 1. 【推荐...
    王朋6阅读 959评论 0 0
  • Glide的使用 Glide是google开发用于Android加载媒体的类库,包括图片,gif,video,已经...
    敖大胆阅读 7,781评论 2 17
  • Day1: 在代码中通过R.string.hello_world可以获得该字符串的引用; 在XML中通过@stri...
    冰凝雪国阅读 1,386评论 0 5