在PreferenceAcitity中使用Fragement时避免额外的Left和RightPadding

数据仓库的复用性:设计和构建一个高复用性的数仓 数据仓库的复用性是指在数据仓库的设计和使用过程中,能够实现数据、模型、流程、工具等多个层面的重复利用,减少重复开发,提高开发效率,降低维护成本,并增强灵活性和可扩展性。 阅读详情

On Android 4.4

遇到过这样的问题:

注意到,上面的ActionBar部分的左右各有48像素的padding。

 

要了解该问题的成因,要首先了解其结构:

  1. 该页面的Activity是一个PreferenceActivity,是个三级页面,是通过上一个PreferenceActivity调用startWithFragment启动的;
  2. 该页面的内容是放置了一个Fragment,该Fragment,实现了自己的ActionBar (ActionBar是来自Fragment而不是Acitivity)

我们通过hierarchyviewer看一下它的界面构成:

 

截图中的PreferenceFrameLayout就是这个关键类。

PreferenceAcitivity的布局文件是 frameworks/base/core/res/res/layout/preference_list_fragment.xml

但是,PreferenceFrameLayout类的风格却是由android内部的一个风格控制的:(frameworks/base/core/res/res/values/styles.xml)

<stylename="Widget.Holo.PreferenceFrameLayout">                                                                                                                                                        
    <itemname="android:borderTop">0dip</item>
    <itemname="android:borderBottom">@dimen/preference_fragment_padding_bottom</item>
    <itemname="android:borderLeft">?attr/preferenceFragmentPaddingSide</item>
    <itemname="android:borderRight">?attr/preferenceFragmentPaddingSide</item>
</style>

preferenceFragmentPaddingSide的值在不同平台值不同,在这里定义为16dip (16*3 = 48)

他通过默认风格引用的(frameworks/base/core/res/res/values/themes.xml)

<itemname="preferenceFrameLayoutStyle">@android:style/Widget.PreferenceFrameLayout</item>
这样,在默认情况下,PreferenceActivity都会带有边框Padding。

 

但是PreferenceFrameLayout还有一个特殊属性:layout_removeBorders。这个属性为true时,表示忽略padding。他对应的是PreferenceFrameLayout.LayoutParams.removeBorders 这个变量。

PreferenceFragment这个和PreferenceActivity匹配的Fragment,就具有该属性:(frameworks/base/core/res/res/layout/preference_list_fragment.xml)

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:background="@android:color/transparent"
    android:layout_removeBorders="true">
.....


因此,PreferenceFragment放到PreferenceActivity的时候,这个边框就没有了。

不幸的时,以上所有的layout属性都是Private的,无法更改,因此,当我们的Fragment不是PreferenceFragment或者它的派生类的时候,就不能消除边框了。

 

不过,我们还有其他的解决方法,万幸的是PreferenceFrameLayout和PreferenceFrameLayout.LayoutParams都是Public的。因此,我们可以直接代码修改:

@Override
public View onInflateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    View view = inflater.inflate(
        ....., container,false);
    if(container != null) {
        ViewGroup prefView = (ViewGroup)container.getParent();
        ViewGroup.LayoutParams layoutParams = (ViewGroup.LayoutParams)prefView.getLayoutParams();
        if(layoutParams instanceofPreferenceFrameLayout.LayoutParams) {
            ((PreferenceFrameLayout.LayoutParams)layoutParams).removeBorders =true;
        }
    }
    returnview;
}


在Fragment的onInflateView函数中强制修改removeBorders就可以达到这样的目的。

当然,需要正确找到PreferenceFrameLayout的第一个子View,修改该子View的LayoutParams才能生效,这需要根据不同的情况来分别对待。

UNet改进(12):融合小波变换与注意力机制的图像分割新方法 本文提出了一种改进的WaveletAttentionUNet架构,通过结合小波变换和注意力机制来增强传统UNet的多尺度特征提取能力。该网络使用分组卷积模拟小波分解,将输入通道扩展为4个子带(LL、LH、HL、HH),并通过通道注意力机制自适应加权各子带特征。网络保留了UNet的编码器-解码器结构,在关键位置集成了WaveletAttention模块。实验证明该方法在医学图像分割等任务中能更好地保持边缘细节和复杂纹理特征,同时保持计算效率。 阅读详情

相关推荐

结构光三维重建2——多频外差解包裹

本文深入解析了结构光三维重建中的多频外差解包裹技术。针对四步相移法产生的相位包裹问题,该方法通过投影多组不同频率的条纹光,利用外差原理逐级解算,最终获得精确、连续的绝对相位值,是实现高精度、稳健三维重建的关键步骤。

weixin_29056101的博客 350

彻底变换PreferenceFragment样式和全局设置字体样式的解决方案

一、PreferenceFragment样式修改 新样式直接上图,原样式为白色样式,即为PreferenceFragment的默认样式: ① 白底黑字;② SwitchPreference开关默认为蓝色; ③ ListPreference列表默认为白色,选中状态为蓝色;④ 每个设置选项标题颜色为蓝色 下图为新样式,彻底变换: ① 黑底白色; ② SwitchP...

Chin_Style的博客 3398

STM32 BLDC无刷电机霍尔信号捕获与换相控制实战解析

本文深入解析了STM32如何实现BLDC无刷电机的霍尔信号捕获与换相控制。详细阐述了硬件接口配置、定时器霍尔传感器模式的使用、抗干扰的滤波器与软件容错设计,以及中断服务与换相逻辑的实战代码。重点解决了信号抖动、换相不准等常见问题,旨在帮助开发者构建稳定可靠的电机驱动基础。

weixin_29193259的博客 367

android PreferenceActivity结合PreferenceFragment实现参数设置界面学习实例

讲解: PreferenceActivity结合PreferenceFragment实现参数设置界面:此界面是专门用来做设置界面的,例如:Android的下拉菜单中的设置就是用的此方法设计的,外形美观,设计简便,无需什么监听器,intent打开之类的,与传统activity设计不同。 PreferenceActivity:负责加载选项设置列表的布局文件  (在这里面设计列表) Prefe

zhangjikuan的专栏 3467

Springboot——接入企业微信聊天机器人

最近企业微信的聊天机器人很火也很好玩,本期想自己接入一个玩玩试试水,同时也接入AI大模型进行数据的交互。

专注写bug 1321

5 分钟上手 Kimi Work:安装、配置、跑通第一个任务

这篇文章提供了Kimi Work的快速入门指南,帮助用户在5分钟内完成从安装到运行第一个任务的全过程。主要内容包括: 安装步骤: macOS用户下载.dmg文件并拖入Applications Windows用户下载.exe安装包,需注意中文路径问题 初始设置: 使用现有Kimi账号登录 检查任务配额和文件访问权限 首个任务推荐: 建议从简单的本地文件整理开始(如按类型分类桌面文件) 详细说明了任务执行流程和审批机制 常见问题: 计划生成卡顿的解决方法 文件无变化的排查步骤 进阶建议: 提供难度递增的后续任务

sg_knight的专栏 2773

Android设置之Preference源码实现

设置页面超简单实现,同时也是阅读系统setting应用必不可少

tangedegushi的博客 2860

RAP 时代的 Service Binding:把 CDS 业务服务稳稳地“插”到 OData 里

本文深入解析SAP ABAP开发中的关键对象Service Binding,阐述了如何通过三层架构(数据模型、服务定义、服务绑定)实现业务逻辑与协议分离。文章重点分析了Service Binding的核心参数配置,包括服务命名规范、协议类型选择(OData V2/V4、InA、SQL)及服务形态(UI Service与Web API),并通过实际案例说明不同选项的应用场景。同时介绍了服务版本控制机制、发布流程及Fiori预览功能,帮助开发者理解如何通过Service Binding将业务能力高效转化为可消费

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5710

Android设置界面_Preference

AndroidPreference基本上每个应用都有一个设置(首选项)界面, Google其实提供了默认的设置界面实现方式. 介绍下Preference该类拥有多个直接或间接的子类, 这些子类可以组成不同内容的首选项界面. 和一般界面不同的关键类: Preference 普通 RingtonePreference 铃声 CheckBoxPreference 选择按钮 SwitchPreferen

肥宅 1944

如何使用 Conda 安装 Qiskit(详细教程)

本文介绍了使用conda安装Qiskit量子计算工具包的完整流程。首先创建Python 3.10的conda虚拟环境(qiskit_env),然后安装Qiskit核心包及可视化组件(注意Mac用户的安装命令差异)。接着注册IPython内核并测试环境,通过量子电路创建与可视化演示验证安装成功。该教程为量子计算开发提供了简洁的环境配置指南,适合研究者和开发者快速搭建Qiskit开发环境。

猿小白的博客 564

实现敌人跟随玩家。(Unity)

首先和玩家设置一模一样,给敌人添加一个刚体,设置一个碰撞器,并设置一个触发器。然后在对场景里面的组件添加导航网格代理并且进行bake烘焙,那样的话敌人就可以在进行烘焙的位置进行移动。创建脚本,并且挂载脚本到敌人的组件上,用代码进行实现效果,并且要挂载目标对象。

weixin_57813136的博客 1868

PreferenceFragmentCompat源码分析

PreferenceFragmentCompat源码分析

wangwei6227的博客 785

Android蓝牙中的Rfcomm协议介绍

RFCOMM(Radio Frequency Communications)是一种基于蓝牙技术的串口仿真协议,以下是详细介绍:一、协议概述二、工作原理三、应用场景

手机-手表蓝牙开发工程师的博客 712

Android源码个个击破之“设置”

6.0设置源码分析:https://blog.youkuaiyun.com/zrf1335348191/article/details/51469058?locationNum=81.源码位置:/packages/apps/Settings/2.Settings.java即是应用的首页3.|----SettingsActivity.java (和Settings.java就在...

weixin_34023863的博客 233

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

三十、Java图形化界面设计——布局管理器之BorderLayout(边界布局)

边界布局管理器把容器的的布局分为五个位置:CENTER、EAST、WEST、NORTH、SOUTH。依次对应为:上北(NORTH)、下南(SOUTH)、左西(WEST)、右东(EAST),中(CENTER),如下图所示。 特征: l  可以把组件放在这五个位置的任意一个,如果未指定位置,则缺省的位置是CENTER。 l  南、北位置控件各占据一行,控件宽度将自动布满整行。东、西和中间

liujun13579的专栏 20万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Preference、PreferenceActivity,PreferenceFragment

先推荐两篇总结得比较好的文章: Android中Preference的使用以及监听事件分析 Android应用Preference相关及源码浅析(Preference组件家族篇) 先看详细的还是看上面两个链接吧。下面我只是对上面链接的两篇文章做一个概括。 Preference及其体系的用处

淡淡的宁静的博客 839

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

PreferenceFragment详解

一、PreferenceFragment的引入: PreferenceActivity是一个非常有用的基类,当我们开发Android项目时避免不了选项设置,这些设置习惯用Preference来保存。Android专门为这种Activity提供了便捷的基类PreferenceActivity。如果继承自Preference则不需要自己控制Preference的读写,PreferenceActi

路在脚下 1605

Android Fragement学习笔记(三)----PreferenceFragment的使用

相信大家对Perference都比较熟悉了,也就是我们常说的偏好设置,首选项设置,可以保存一些数据,例如我们在上一次使用的时候的一些内容,希望在下一次启动后依然生效,而不需要再进行配置那么麻烦。一般这个时候我们便会使用perference键值对的方式来处理,在android3.0之前,我们一般去继承Preference这个基类去给用户呈现一个可以设置的界面,其中的layout需要自己编写,今天我...

daibalusu 927

Android更改 PreferenceFragment 的背景颜色

我使用的PreferenceFragment与如下所示的 xml 文件 public class ReaderPreferences extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanc...

weixin_33913332的博客 681

自定义PreferenceActivity和PreferenceFragment的样式

感谢:http://blog.youkuaiyun.com/luck_apple/article/details/7064004 这篇文章讲的是如何定义fragment的样式,基本布局都是从源码中弄过来的。通过设置布局文件的属性,让我们可以自定义preference的界面。 先来看看xml文件中的内容 &lt;PreferenceScreen xmlns:android="http://schema...

weixin_34219944的博客 278

Android 中SettingsActivity(PreferenceFragmentCompat)的简单使用

如果你需要一个简单的APP设置,可以使用sharedPreferences进行存储,我们可以借助AndroidStudio快速创建一个用于设置的Activity,其实它是继承PreferenceFragmentCompat,存储方式用的就是sharedPreferences,只是帮我们节省了很多操作。

s_nshine的博客 1780

Android中设置界面PreferenceFragment的用法

发现Android虽然为我们提供了很好的设置界面的东西(也就是这个PreferenceFragment),但是网上的资料还真是少之又少,可能大家的需求都是自己做设置界面,不稀罕Google为我们做好的,不过既然用到了这个东西,还是拿出来做下笔记 第一步,我们现在res中写一个preferences.xml文件,当然你也可以命名成其他的名字文件目录如下: 根文件布局是PreferenceScreen

气派的欠账包店 4040

在Android中让Preference的宽度占满整个屏幕的宽度

今天遇到一个问题,需要修改Preference的宽度,让其与屏幕宽度一致。搞了一上午。终于发现Preference的这个尺寸是在PreferenceFrameLayout中设置的。通过下面这段代码, mBorderTop = a.getDimensionPixelSize( com.android.internal.R.styleable.Prefere...

weixin_30527323的博客 306

自定义PreferenceFragment,去掉padding(默认)

自定义PreferenceFragment @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // del preferencescreen default padding!!! // viewchild = 3

u013266076的专栏 1506

android 蓝牙分析(一)

android 蓝牙分析(一) 最近公司想要使蓝牙a2dp source和a2dp sink动态切换。 于是决定进行相应的源码调整。现在将一些分析结果整理一下 因为从来没有android 蓝牙的工作经验,所以先从android的蓝牙架构开始 注意:本次分析使用了msm8996 android 8.1 平台 一,android蓝牙架构 查看android 官网,可以获得架构相关的知识,如下图 二,从上到下的源码分析第一步Settings 应用 从架构图中,先找到蓝牙架构的应用app,然后逐渐往下。首先是

安仔的博客 2888

PreferenceFragment

PreferenceFragment 使用的时候,有时候会想让其占满屏幕,但是本身有没有什么好的设置方法,通过网上查询得到的2个解决方案:方法一,在Fragment中的onCreateView的时候,用我们自己的的Layout文件替代系统的Layout文件。只是注意文件的Id和布局要和系统的一样。 只不过把文件中设置ListView的Padding的地方改掉就可以了。 @Override

yx19861211的博客 703
上一篇: Override ListView getAdapter造成的后果
下一篇: 序言
漂流的代码
博客等级 码龄23年 188粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值