Android Settings应用 PreferenceScreen 条目隐藏实现和简单分析

Android Settings应用 PreferenceScreen 条目隐藏实现和简单分析

文章目录

  • Android Settings应用 PreferenceScreen 条目隐藏实现和简单分析
    • 一、前言
    • 二、隐藏实现
      • 1、xml 文件中隐藏PreferenceScreen 的某个条目
      • 2、普通Preference条目的隐藏的Java代码实现
      • 3、SwitchPreference条目的隐藏的Java代码实现
      • 4、查找 Preference 对应Java代码的思路
    • 三、其他
      • 1、Preference 条目的隐藏的思路
      • 2、Android Preference简单介绍

一、前言

Android 原生设置Settings应用很多界面都是使用xml的 PreferenceScreen 形式进行显示,
PreferenceScreen 里面包含很多条目,如果要隐藏某个条目就要修改xml或者Java代码,
有些情况修改xml是无效的,修改Java代码才有作用。

本文简单记录一下Settings PreferenceScreen 某个条目隐藏实现。

网上百度到的像View那样隐藏item的代码肯定是不对的。

在这里插入图片描述
上面 Preference 代码的显示和隐藏使用的是View的那套。

上面百度生成的答案是错误的参考示例。
具体实现下面有分析讲解。

二、隐藏实现

已原生Android14 Settings的某个xml和相关Java文件做讲解。

1、xml 文件中隐藏PreferenceScreen 的某个条目

wifi设置里面的“网络偏好设置”的xml 布局:
Settings\res\xml\wifi_configure_settings.xml

<PreferenceScreenxmlns:android="http://schemas.android.com/apk/res/android"xmlns:settings="http://schemas.android.com/apk/res-auto"android:title="@string/wifi_configure_settings_preference_title"><SwitchPreferenceandroid:key="enable_wifi_wakeup"android:title="@string/wifi_wakeup"android:icon="@drawable/ic_auto_wifi"android:summary="@string/wifi_wakeup_summary"settings:isPreferenceVisible="false"settings:controller="com.android.settings.wifi.WifiWakeupPreferenceController"/>...<SwitchPreferenceandroid:isPreferenceVisible="false"android:key="ethernet_turn_off"android:summary="ethernet info"android:title="ethernet_turn_off" /><Preferenceandroid:key="install_credentials"settings:isPreferenceVisible="false"android:title="@string/wifi_install_credentials"/><Preferenceandroid:key="wifi_direct"settings:isPreferenceVisible="false"android:title="@string/wifi_menu_p2p"android:fragment="com.android.settings.wifi.p2p.WifiP2pSettings" /></PreferenceScreen>

上面的条目都添加了隐藏代码:

settings:isPreferenceVisible="false"

但是实际上只有 ethernet_turn_off 和 install_credentials 会隐藏,其他的条目设置后是没有作用的。

所以xml中直接写隐藏实现,是不一定有用的,
实际项目中需要查看Java代码中有没有对其进行控制。

查看一下Java实现代码发现要做如下修改才能隐藏相关条目:

2、普通Preference条目的隐藏的Java代码实现

"WLAN直连"选项:

public class WifiP2pPreferenceController extends AbstractPreferenceController {private static final String KEY_WIFI_DIRECT = "wifi_direct";@Overridepublic boolean isAvailable() {return false; //false 是不可见}
}

AbstractPreferenceController 是 androidx.preference.Preference 原生的,实现 isAvailable() 方法即可决定该条目的隐藏和显示。

3、SwitchPreference条目的隐藏的Java代码实现

"自动开启WLAN"选项:


public class WifiWakeupPreferenceController extends TogglePreferenceController {private static final String KEY_ENABLE_WIFI_WAKEUP = "enable_wifi_wakeup";@Overridepublic int getAvailabilityStatus() {//set visible false change by liwenzhiif (true) {return DISABLED_FOR_USER; //不可见}return AVAILABLE; //可见}}

TogglePreferenceController 是 Settings自定义的,实现 getAvailabilityStatus() 方法即可决定该条目的隐藏和显示。

4、查找 Preference 对应Java代码的思路

xml 中 Preference 主要代码:

    <XXXPreferenceandroid:key="keyName".../>

每个 Preference 都是要定义key 的,Java代码所以Java代码中要找到这个 Preference ,就要通过这个keyName ,类似findViewById那样。

所以控制这个 Preference 的Java 代码,肯定会定义对应的keyName。

而找到这个 Preference 也是可以手动对其进行隐藏或者显示的。

SwitchPreference switchPreference = (SwitchPreference) findPreference("ethernet_turn_off");
switchPreference.setVisible(false);//true是显示,false是隐藏

三、其他

1、Preference 条目的隐藏的思路

(1)查看Java代码中有没有控制 Preference 的显示和隐藏

1、查看对于的控制类有没有 isAvailable() 方法的实现
2、查看对应的控制类有没有 getAvailabilityStatus() 方法的实现
3、查看对应的控制类没有直接控制 setVisible 方法的调用

(2)如果Java代码没有控制直接在xml中修改即可

settings:isPreferenceVisible="false"

如果需要自己属性控制隐藏显示的,那么也是只能在Java代码中控制。

简单的说就是xml修改显示隐藏不一定生效,主要还是要看Java 是否控制。

2、Android Preference简单介绍

PreferenceScreen和SwitchPreference 简单示例
相关demo代码示例
(1)SettingsActivity.Java
(2)layout\settings_activity.xml
(3)xml\root_preferences.xml
(4)build.gradle
(5)示例demo效果:

相关链接:

https://blog.csdn.net/wenzhi20102321/article/details/136902514

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/871002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

栈(Stack)与队列(Queue,Deque)

前言&#xff1a; 栈与队列在数据结构中用法都相对比较简单&#xff0c;是数据结构中经常用到的两种。 1.栈&#xff08;Stack&#xff09; &#xff08;1&#xff09;特点&#xff1a; 先入后出&#xff0c;后入先出。栈的底层就是一个数组&#xff08;java原生库中&#x…

在PyQt中为自己开发的软件实现远程文件“一机一码”授权管理实例

在使用PyQt搞软件开发时&#xff0c;开发者往往想要给自己的软件添加一个授权机制&#xff0c;只有当客户提供了授权码并且开发者将授权码放在授权管理系统的时候&#xff0c;客户端才能正常启动。这几天小陶就在捣鼓这个事&#xff0c;发现确实是可行的。 如果没有进行授权&a…

Ajax从零到实战

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

VR头显如何低延迟播放8K的RTSP|RTMP流

技术背景 我们在做Unity平台RTSP、RTMP播放器的时候&#xff0c;有公司提出来这样的技术需求&#xff0c;希望在头显播放全景的8K RTSP|RTMP直播流&#xff0c;8K的数据&#xff0c;对头显和播放器&#xff0c;都提出了新的要求&#xff0c;我们从几个方面&#xff0c;探讨下V…

SpringAOP的坑

AOP中几种常见的通知类型及其基本作用&#xff1a; Before&#xff1a;前置通知&#xff0c;在目标方法执行之前执行。After&#xff1a;后置通知&#xff0c;无论方法执行结果如何&#xff08;包括异常&#xff09;&#xff0c;都会在目标方法执行之后执行。AfterReturning&a…

Elasticsearch 更新指定字段

Elasticsearch 更新指定字段 准备条件查询数据更新指定字段更新子级字段 准备条件 以下查询操作都基于索引crm_clue来操作&#xff0c;索引已经建过了&#xff0c;本文主要讲Elasticsearch更新指定字段语句&#xff0c;下面开始写更新语句执行更新啦&#xff01; 查询数据 查…

MacOS 通过Docker安装宝塔面板搭建PHP开发环境

1、docker拉取ubuntu系统 docker pull ubuntu2、运行容器 docker run -i -t -d --name bt -p 20:20 -p 21:21 -p 80:80 -p 443:443 -p 888:888 -p 8888:8888 -p 3306:3306 -p 6379:6379 --privilegedtrue -v /Users/oi/Sites:/www/wwwroot ubuntu-v 后的 /Users/oi/Sites 代表…

【电子通识】什么是无源元件的认证用可靠性试验标准AEC-Q200?

目前电动汽车已经是一个大趋势&#xff0c;汽车上安装有由多个电子零部件构成的ECU&#xff08;电子控制单元&#xff09;。即使汽车在恶劣的环境下行驶&#xff0c;电子零部件也必须不出故障地正常工作。因此&#xff0c;车载电子零部件与消费类电子相比&#xff0c;要求其达到…

Yarn标签调度--HDP测试

hadoop版本从2.7.2版本开始 新增标签调度功能。 标签调度功能&#xff1a;可以给节点设置标签 让作业任务调度到这个设置的标签节点。 列入&#xff1a; 某个任务需要用到gpu资源&#xff0c;而gpu并非在每个节点上都有&#xff0c;通过对节点设置标签&#xff0c;可以使作业…

光伏规约转换器,光伏并网,逆变器配套锦浪。

光伏规约转换器&#xff0c;光伏并网&#xff0c;逆变器配套锦浪&#xff0c;科士达&#xff08;4针航插&#xff09;&#xff0c;首航&#xff08;16针&#xff09;线束。 光伏规约转换器&#xff0c;光伏并网&#xff0c;逆变器配套锦浪。

某某会员小程序后端性能优化

背景 某某会员小程序后台提供开放平台能力&#xff0c;为三方油站提供会员积分、优惠劵等api。当用户在油站加油&#xff0c;油站收银会调用我们系统为用户发放积分、优惠劵等。用户反馈慢&#xff0c;三方调用发放积分接口性能极低&#xff0c;耗时30s&#xff1b; 接口情况…

ARM平台实现Docker容器技术

什么是Docker&#xff1f; &#xff08;1&#xff09;Docker的架构 Docker是一个开源的应用容器引擎&#xff0c;让开发者可打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的Linux或Windows机器上&#xff0c;亦可实现虚拟化。容器是完全使用沙…

GESP 2023年12月C++二级真题

参考程序1&#xff1a; #include<iostream> using namespace std;int first,second; int m,n; int sum 0;int fn(int n) {if(n1) {return first;} else if (n2) {return second;} else {return fn(n-1)fn(n-2);} } int main() {cin>>first>>second;cin>…

一个使用Go语言和现代Web技术构建跨平台桌面应用程序开源项目

大家好&#xff0c;今天给大家分享一个使用Go语言和现代Web技术构建跨平台桌面应用程序开源项目Wails。 Wails是一个允许开发者使用Go和Web技术编写桌面应用程序的项目。 它被设计为Go的快速且轻量的Electron替代品&#xff0c;旨在提供一个平台&#xff0c;让开发者可以利用Go…

unity使用 MQTT复现plant simulate仿真

unity使用 MQTT复现plant simulate仿真 一、plant simulate端配置 1、plant simulate MQTT组件配置&#xff0c;该组件在类库的信息流类目下&#xff0c;端口不变&#xff0c;填写ip即可&#xff1b; 2、设备配置界面&#xff0c;在控件入口和出口处各挂一个脚本&#xff0c;…

文件读写操作之c语言、c++、windows、MFC、Qt

目录 一、前言 二、c语言文件读写 1.写文件 2.读文件 三、c文件读写 1.写文件 2.读文件 四、windows api文件读写 1.写文件 2.读文件 五、MFC文件读写 1.写文件 2.读文件 六、Qt文件读写 1.写文件 2.读文件 七、总结 一、前言 我们在学习过程中&#xff0c…

面向对象机考指南

目录 Eclipse使用 调字体大小 Ptg to JavaBean 解决控制台消失问题 第三题大题 控制台 Eclipse使用 调字体大小 Window —> Preferences 搜索font 点击Color and Fonts 找到Java 展示字体 这个这个 即可调节字体大小 Ptg to JavaBean 生成 空参构造 带参构造 gett…

C++基础(一)

目录 1.不同版本的hello word&#xff01; 2.namespace和&#xff1a;&#xff1a;域作用限定符以及using 2.1 namespace 2.2&#xff1a;&#xff1a; 2.3using用于展开域 3.C输入和输出 4.缺省参数 5.重载 6.引用 6.1引用介绍 6.2 引用的特性 注意&#xff1a; 6.4 c…

win11用户由中文名改为英文名

目录 前情提要 一喜一悲&#xff1a;找回“消失”的文件&#xff0c;却失去新建文件的权限。 找回“消失”的文件 ​编辑 失去新建文件的权限 核心问题&#xff1a;怎么解决右键只建立文件夹&#xff1f; 弯路1&#xff1a;获取管理员权限 弯路2&#xff1a;获取管理员权…

Linux基础(权限)+mysql(函数)+初始shell

[rootcentos ~]# whereis test.c test: /usr/bin/test /usr/share/man/man1/test.1.gz /usr/share/man/man1p/test.1p.gz [rootcentos home]# zip -r my.zip lesson1 将目录设为zip unzip my.zip -d xxxxxx 可指定要减压到的位置。 tar [-cxtzjvf] 文件与目录 .... 参数&…