Settings 中新增item , 及全局搜索

2021-09-30  本文已影响0人  呵呵豆

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
<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>
public class Settings extends SettingsActivity {
    ...
        public static class TestSettingsActivity extends SettingsActivity { /* empty */ }
    ...    
}
/**
  * Add for Smart Controls
   *@{
   */
        somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
                        Settings.TestSettingsActivity.class.getName()),
                 true /*false则隐藏,true显示*/, isAdmin)
                || somethingChanged;
 Settings.TestSettingsActivity.class.getName(),
  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的搜索


上一篇 下一篇

猜你喜欢

热点阅读