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

海康视觉平台VisionMaster通讯实战:三种触发方式深度解析 本文深度解析海康视觉平台VisionMaster的三种通讯触发方式:字符串触发、接收字符串事件触发和轮询D地址触发。通过实际案例和配置技巧,帮助工程师在工业场景中实现高效、稳定的设备通讯,提升视觉系统的集成效率和可靠性。 阅读详情

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才能生效,这需要根据不同的情况来分别对待。

StarRC常见问题整理 我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?使用starrc_cmd “错误代码”就能看对应Error或Warnning的解释。 阅读详情

相关推荐

PINN——加入物理约束的神经网络

【摘要】 基于物理信息的神经网络(Physics-informed Neural Network, 简称PINN),是一类用于解决有监督学习任务的神经网络,它不仅能够像传统神经网络一样学习到训练数据样本的分布规律,而且能够学习到数学方程描述的物理定律。与纯数据驱动的神经网络学习相比,PINN在训练过程中施加了物理信息约束,因而能用更少的数据样本学习到更具泛化能力的模型。本文主要解析这种神经网络以...

qq_39444290的博客 4582

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

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

Chin_Style的博客 3398

克里金插值(Kriging)在MATLAB中的实现(克里金工具箱)

一,直接献上克里金插值MATLAB工具箱 链接:https://pan.baidu.com/s/1p0lt2G8KQ-els7Dyw5jPFg 提取码:wcss 下载后将该程序添加到MATLAB安装文件夹中的/toolbox下,然后在设置路径中添加该程序文件为默认路径即可调用程序。 资源中内附程序使用说明PDF。 二、本人实际操作代码如下所示,标注如下 load data1 %载入数据 %模型参...

qq_40937675的博客 6万+

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

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

zhangjikuan的专栏 3467

工业相机图像格式深度解析:从Mono8到Mono12的选型与应用

本文深度解析工业相机黑白图像格式,重点对比Mono8、Mono10与Mono12的核心差异。文章从位深、动态范围和数据量等关键概念切入,详细阐述了不同格式的优缺点及适用场景,为工业视觉项目中的相机选型提供实战指南,帮助用户在精度、速度与成本间做出最优决策。

weixin_29207439的博客 260

Vivado IP核与约束文件管理指南:解决OOC警告、COE文件丢失与Block Design复用

本文详细介绍了Vivado IP核与约束文件管理的系统化方法,包括解决OOC警告、COE文件丢失与Block Design复用等常见问题。通过IP核锁定机制、分层约束架构和动态约束技术,提升FPGA工程的健壮性和团队协作效率,特别适合中大型项目开发。

weixin_30887919的博客 429

Android设置之Preference源码实现

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

tangedegushi的博客 2860

新手小白入门编程第2讲 JAVA编程环境搭建 JDK与环境变量、Eclipse

1 JDK 1.1 JDK概述 JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。 JDK是整个java开发的核心,它包含了: JAVA开发工具(jdk\bin) 基础开发库(jdk\jre\lib\rt.jar) 基础开发库的源码(jdk\src.zip) 1.2 JDK下载与安装 本次使用的是JDK1.8,详细安装步骤可以参见”JDK培优安装手册”. 注意事项: 同时安装多个JDK时需要使用执行环境变量来确认使用的是哪个jdk 安装时选择默认选项安装到默认

程序媛泡泡的博客 4万+

Android设置界面_Preference

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

肥宅 1944

今日头条面试——iOS开发面试题

layoutIfNeeded和setNeedsLayout的区别。* Pod update和pod install的区别。* 10、autoreleasepool的使用场景。* 如何hook一个对象的方法,而不影响其它对象。* 数组cop后里面的元素会复制一份新的吗。* 介绍项目,主要介绍自己强项一点的地方。* assing可以使用在对象中吗。* isEquel和hash的关系。* 4、谈谈runtime的理解。* 8、谈谈runloop的理解。* copy和strong的区别。

FPGA/MATLAB学习教程/源码/项目合作开发 593

异常数据(outlier data)处理基于分位数法(箱图法、箱型法)替换及删除方案

异常数据(outlier data)处理基于分位数法(箱图法、箱型法)替换及删除方案 简单统计法: 这个原则有个条件:数据需要服从正态分布。 在3倍标准差原则下,异常值如超过3倍标准差,那么可以将其视为异常值。正负3的概率是99.7%,那么距离平均值3之外的值出现的概率为P(|x-u| > 3) <= 0.003,属于极个别的小概率事件。如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。 分位数法(箱图法、箱型法): 并不是说从高斯分布中抽出的所有数据都符..

data+scenario+science+insight 1793

PreferenceFragmentCompat源码分析

PreferenceFragmentCompat源码分析

wangwei6227的博客 785

Simulink中搭建一个包含PID控制的压电陶瓷快反镜模型

这个模型只是一个基本框架,你需要根据实际的系统参数和要求进行调整和优化。希望这些步骤能帮助你在Simulink中搭建所需的模型。

AI的内部世界的博客 474

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

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

liujun13579的专栏 20万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Preference、PreferenceActivity,PreferenceFragment

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

淡淡的宁静的博客 839

lwip-2.0.3

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

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、付费专栏及课程。

余额充值