Setting下面增加搜索(SearchIndexProvider)

来源:互联网 发布:荣威950 知乎 编辑:程序博客网 时间:2024/06/02 06:17

一、

当自己在Settings增加选项a后,如果我们想要被增加的选项a在搜索中也可以被搜索到,那么除了关注自己界面的那个类,还需要关注下面2个类:

src/com/android/settings/search/Ranking.java

src/com/android/settings/search/SearchIndexableResources.java


二、步骤

1、步骤一:自己页面内增加SearchIndexProvider内容


拿Settings下面的About phone来举例,代码6.0,DeviceInfoSettings.java,在自己相应的xxxSettings.java类里面添加以下内容,命名自己名哦,

About phone模板:

  public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =        new BaseSearchIndexProvider() {            @Override            public List<SearchIndexableResource> getXmlResourcesToIndex(                    Context context, boolean enabled) {                final SearchIndexableResource sir = new SearchIndexableResource(context);                sir.xmlResId = R.xml.device_info_settings;                return Arrays.asList(sir);            }};

自己页面内增加:

  public static final SearchIndexProvider SEARCH_INDEX_XXX_PROVIDER =        new BaseSearchIndexProvider() {            @Override            public List<SearchIndexableResource> getXmlResourcesToIndex(                    Context context, boolean enabled) {                final SearchIndexableResource sir = new SearchIndexableResource(context);                sir.xmlResId = R.xml.xxx_xxx_settings; //自己配置文件名称                return Arrays.asList(sir);            }};


2、步骤二:类SearchIndexableResources.java里面添加内容

About phone模板:

  sResMap.put(DeviceInfoSettings.class.getName(),                new SearchIndexableResource(                        Ranking.getRankForClassName(DeviceInfoSettings.class.getName()),                        NO_DATA_RES_ID,                        DeviceInfoSettings.class.getName(),                        R.drawable.ic_settings_about));

添加

import com.android.settings.XXXSettings;

sResMap.put(XXXSettings.class.getName(),                new SearchIndexableResource(                        Ranking.getRankForClassName(XXXSettings.class.getName()),                        NO_DATA_RES_ID,                        XXXSettings.class.getName(), //XXXSettings为自己页面类名字                        R.drawable.xx));//图片资源

3、步骤三:在Ranking.java文件里面增加自己内容

Adbout phone模板:

sRankMap.put(DeviceInfoSettings.class.getName(), RANK_DEVICE_INFO);

在该文件里面增加自己内容哟


import com.android.settings.XXXSettings;public static final int RANK_XXX_XX = 22;sRankMap.put(XXXSettings.class.getName(), RANK_XXX_XX);


其实这个可以grep一下,参照别的页面做的,按部就班


最后需要注意也是关键的地方

a.继承SettingsPreferenceFragment,实现Indexable

例如:public class XXXSettings extends SettingsPreferenceFragment implementsIndexable{}

b.添加以上东西前提是Settings.java和SettingsActivity.java里面都已经添加好相关内容了哟。其实没添也不会挂,哈哈。最好标准化添加上。



0 0
原创粉丝点击