21.android 7.0,8.0,9.0 Settings设置内置选项在一级菜单fragment方式

我的私人博客:www.mrloveqin.top 可以查看更多内容

21. Settings内置选项在一级菜单fragment方式
① 在AndroidManifest.xml 添加如下代码

<!-- 这样写,然后在Settings中声明成Settings的内部类,从而不需要单独再写FlashSettingsActivity的实现类 

FlashSettingsActivity 并不是一个Activity文件,只是一个SettingsActivity的子类,且是空实现。
之所以要加此空的Activity,是为了外部应用能直接跳转到FlashSettingsActivity界面,因为如果只是fragment的话,外部是没法跳转到fragment界面的,
跳转到FalshSettingsActivity时,会执行其父类SettingsActivity.java中的方法,并根据FlashSettingsActivity在清单文件中的注册信息,
它的meta-data的值,找到FlashSettingsActivity对应的fragment(FlashSettings),显示出fragment界面,实现借壳。

如果<meta-data>中使用的是FRAGMENT_CLASS,一般都会声明成Settings的内部类即 <activity android:name="Settings$xxxActivity" > 的形式。

注意此fragment是继承与settings中通用的SettingsPreferenceFragment,并不是一般的fragment类-->
	 <activity android:name="Settings$FlashSettingActivity" 
                    android:label="MrloveFragment"
                    android:icon="@drawable/ic_home_wikofeatures"
                    android:taskAffinity="">
                <intent-filter android:priority="1">
                    <action android:name="com.android.settings.FLASH_SETTING" />
                    <action android:name="android.settings.FLASH_SETTING" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="android.intent.category.VOICE_LAUNCH" />
                    <category android:name="com.android.settings.SHORTCUT" />
                </intent-filter>
                  <!-- 优先级来确定显示位置 在category中的物理位置(按优先级排序时用到,并不是指第9个位置,数越大优先级越大越靠前) -->
                <intent-filter android:priority="9">
                    <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.homepage" />
 		         <!-- FRAGMENT_CLASS 表明value指定的类是fragment -->
                <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                    android:value="com.android.settings.FlashSetting" /><!--FlashSettings实现类 -->
                 <!-- 被管理账户的intent透传 
                 特别说一下com.android.settings.PRIMARY_PROFILE_CONTROLLED,这个在SettingsInitialize.java中有用到,
                 如果这个值为true,就会调用PackageManager的addCrossProfileIntentFilter()方法,
                 这个方法的作用是让某些Intent透传到其他Profile而不被本Profile的同名组件所捕获。主要用在被管理账户和主账户之间的数据通信。-->
                <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                    android:value="true" />
            </activity>

②自己实现FlashSetting 这个fragment代码如下:

package com.android.settings;
import android.os.Bundle;
import android.preference.PreferenceFragment;
public class FlashSetting extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.right_fragment);
    }
}

③在xml文件夹实现right_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory
        android:key="set_local"
        android:title="我的位置" />

    <CheckBoxPreference
        android:defaultValue="true"
        android:key="apply_wireless"
        android:summary="使用无线网络在应用程序(比如Google地图)中查看位置"
        android:title="使用无线网络"></CheckBoxPreference>
</PreferenceScreen>

④在Settings.java中添加

 public static class FlashSettingActivity extends SettingsActivity { /* empty */ }

⑤在package com.android.settings.core.gateway;的SettingsGateway.java文件中添加如下代码
一,引入包

import  com.android.settings.FlashSetting;

二, 在public static final String[] ENTRY_FRAGMENTS方法中添加:

FlashSetting.class.getName(),

三,在public static final String[] SETTINGS_FOR_RESTRICTED方法中添加:

Settings.FlashSettingActivity.class.getName(),

https://www.jianshu.com/p/2e644c08646d
https://blog.csdn.net/fsc_fantexi/article/details/90668122

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值