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

2023-05-16

我的私人博客: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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何为ScrollView放置固定图像背景?

    我应该想要滚动视图滚动 而不是背景中的图像 将图像添加到滚动视图框架之前的视图层次结构的较高位置
  • React Native 从 JavaScript 代码内部访问 strings.xml

    有没有办法访问当前值android app src main res values strings xml从 JavaScript 代码内部 我想为每个构建放置不同的端点 URL 但我什至无法检测到反应本机代码内的构建类型 而不必求助于 D
  • 在 Android Studio 中,为什么我必须在模拟器中单击“运行应用程序”两次才能启动应用程序?

    在 Android Studio 中 当我按播放按钮在 Android 模拟器上安装并运行应用程序时 大约 5 10 秒后 我在屏幕底部收到一条消息 显示 安装成功 但应用程序实际上并未运行在模拟器上 我必须再次按下播放按钮 这是非常令人沮
  • 在 ViewPager Fragments 中使用 Master/Detail 模板(下载链接)

    工作代码 https github com lukeallison ViewPagerMasterDetail https github com lukeallison ViewPagerMasterDetail Android 主 详细流
  • Android Activity 生命周期函数基础知识

    我正在测试这段代码 它显示活动所处的状态 public class Activity101Activity extends Activity String tag Lifecycle Called when the activity is
  • Adobe 是否为其 PDF 阅读器提供 Android SDK 或 API? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在我们的应用程序内的视图中显示本地 PDF 文件 在 Android 4 03 下的平板电脑上运行 目前 我们将 Adob eR
  • Android 模拟器插件无法初始化后端 EGL 显示

    我在 Cloudbees 上设置了 Jenkins 作业 并且可以在那里成功签出并编译我的 Android 项目 现在我想在 android 模拟器中运行一些 JUnit 测试并添加 Android 模拟器插件 我将 显示模拟器窗口 选项设
  • CollapsingToolBarLayout - 状态栏稀松布颜色不改变

    几天前我更新了我的 android studio 并开始使用 CoordinatorLayout 和 CollapsingToolbarLayout 只是尝试一些东西 工具栏稀松布颜色似乎覆盖了状态栏初始颜色和状态栏稀松布颜色 从 xml
  • Android SIP 来电使用带有广播接收器的服务

    大家好 其实我正在尝试创建一个应用程序 支持基于 SIP 通过互联网进行音频呼叫 这里使用本机 sip 我遇到了来电问题 我已经完成了服务的注册部分 但是在接听电话时我无法接听电话 请帮助我 Service file package exa
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • 实现滚动选择 ListView 中的项目

    我想使用 ListView 您可以在其中滚动列表来选择一个项目 它应该像一个 Seekbar 但拇指应该是固定的 并且您必须使用该栏来调整它 我面临的一个问题是 我不知道这种小部件是如何调用的 这使得我很难搜索 所以我制作了下面这张图片 以
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • Crashlytics 出现 Android Studio 构建错误

    我正在尝试将 CrashLytics 与 Android Studio 和 gradle 一起使用 但出现一个令人困惑的错误 java lang NoSuchMethodError 我的 build gradle 是 buildscript
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐