博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Android中让Preference的宽度占满整个屏幕的宽度
阅读量:6976 次
发布时间:2019-06-27

本文共 2310 字,大约阅读时间需要 7 分钟。

今天遇到一个问题,需要修改Preference的宽度,让其与屏幕宽度一致。搞了一上午。终于发现Preference的这个尺寸是在PreferenceFrameLayout中设置的。通过下面这段代码,        mBorderTop = a.getDimensionPixelSize(                com.android.internal.R.styleable.PreferenceFrameLayout_borderTop,                defaultBorderTop);        mBorderBottom = a.getDimensionPixelSize(                com.android.internal.R.styleable.PreferenceFrameLayout_borderBottom,                defaultBottomPadding);        mBorderLeft = a.getDimensionPixelSize(                com.android.internal.R.styleable.PreferenceFrameLayout_borderLeft,                defaultLeftPadding);        mBorderRight = a.getDimensionPixelSize(                com.android.internal.R.styleable.PreferenceFrameLayout_borderRight,                defaultRightPadding);我们可以发现,可以在主题中对其进行定制。在系统的主题中,我们可以看到如下语句        
@android:style/Widget.Holo.PreferenceFrameLayout
我们在看看这个定义 其中左右边界都不是0,所以,我们看到在3.0之后的版本的Preference的左右两边都有一定的距离,二以前的版本这两个值是0.其定义如下: 在我们自动的主题中,我们可以自定义一个这个的主题。本来以为这样可以完事大吉了。结果发现这几个值不是Public的。应用不能自定义。坏了。 最后,发现在PreferenceActivity和PreferenceFragment中,创建View的时候,用的是布局文件preference_list_content和preference_list_fragment.xml决定打开看看。发现原来这个边界还可以在布局文件中控制。我这里用的是PreferenceFragment.Activity的应该类似。不过我并没有做实验。有两种改法。方法一,在Fragment中的onCreateView的时候,用我们自己的的Layout文件替代系统的Layout文件。只是注意文件的Id和布局要和系统的一样。只不过把文件中设置ListView的Padding的地方改掉就可以了。 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.my_preference_list_fragment, container, false); }方法二:任然使用系统提供的Layout,只不过在onCreateView中用代码设置Padding,代码如下。 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View parent = super.onCreateView(inflater, container, savedInstanceState); if(null != parent) { View listView = parent.findViewById(android.R.id.list); if(null != listView) { listView.setPadding( 0, listView.getPaddingTop(), 0, listView.getPaddingBottom()); } } return parent; }顺便提一下,在实验过程中,发现,如果要修改PreferanceCaegory的Layout定义是在preference_category_holo.xml中。我们完全可以做一个类似的布局文件。然后再Preference的XML中,用android:layout指定我们自己的布局文件。
我们可以修改这个Padding,和样式,来控制Category的外观和位置。

 

转载地址:http://xkupl.baihongyu.com/

你可能感兴趣的文章
EIGRP OSFP 利用NULL0接口防止路由环路 Loopback Null0接口揭秘
查看>>
ipcs
查看>>
TrayIcon 类 添加系统托盘不显示托盘图标
查看>>
Unity3D 材料
查看>>
ControlButton按钮事件
查看>>
HTTP 缓存
查看>>
Apache2.4+Tomcat7集群搭建
查看>>
Linux内置的审计跟踪工具:last命令
查看>>
Nginx自定义模块编写:根据post参数路由到不同服务器
查看>>
Lamp源码安装
查看>>
Linux0.00内核为什么要自己设置0x80号陷阱门来调用write_char过程?
查看>>
mysql数据库备份、恢复文档
查看>>
在linux上MySQL的三种安装方式
查看>>
cocos2dx 场景的切换
查看>>
Java用for循环Map
查看>>
让你提升命令行效率的 Bash 快捷键
查看>>
Python运维项目中用到的redis经验及数据类型
查看>>
一些要注意的地方
查看>>
android Spinner 例子
查看>>
2013年10月1日C#随机数
查看>>