Android4.0设置界面改动总结(二)
今年1月份的时候。有和大家分享给予Android4.0+系统设置的改动:Android4.0设置界面改动总结
时隔半年。回头看看那个时候的改动。事实上是有非常多问题的,比方说:
①.圆角Item会影响到第三方应用(由于我是公共改动的framework下的PreferenceGroupAdapter嘛)。
②.设置不能横竖屏切换。
因为当时客户催的比較急,没有顾及到。只是后来。我们在做新平台的时候,是有又一次完好的,今天就和大家分享一下。
第一个问题的解决:
①.在PreferenceGroupAdapter中加一个boolean变量mIsRoundCornerPreference,假设为true时返回圆角处理过的view,为false时则返回原来的view。代码例如以下:
// start by liweiping 20140523
View view = preference.getView(convertView, parent);
if (!mIsRoundCornerPreference) {
return view;
} else {
if (mPreferenceListBackgroundIndex.get(position) == SINGLE_LINE_ROUND_CORNER_BACKGROUND) {
view.setBackgroundResource(com.android.internal.R.drawable.easy_pref_item_single);
} else if (mPreferenceListBackgroundIndex.get(position) == TOP_ROUND_CORNER_BACKGROUND) {
view.setBackgroundResource(com.android.internal.R.drawable.easy_pref_item_top);
} else if (mPreferenceListBackgroundIndex.get(position) == CENTER_RECTANGLE_BACKGROUND) {
view.setBackgroundResource(com.android.internal.R.drawable.easy_pref_item_center);
} else if (mPreferenceListBackgroundIndex.get(position) == BOTTOM_ROUND_CORNER_BACKGROUND) {
view.setBackgroundResource(com.android.internal.R.drawable.easy_pref_item_bottom);
}
return view;
}
//end by liweiping 20140523
②.mIsRoundCornerPreference这个变量是通过读取attrs.xml中的属性来获取的,在实例化PreferenceGroupAdapter对象的时候即读取,详细代码例如以下:
public PreferenceGroupAdapter(PreferenceGroup preferenceGroup) {
mPreferenceGroup = preferenceGroup;
// If this group gets or loses any children, let us know
mPreferenceGroup.setOnPreferenceChangeInternalListener(this);
mPreferenceList = new ArrayList<Preference>();
mPreferenceLayouts = new ArrayList<PreferenceLayout>();
//start by liweiping 20140523
TypedArray a = mPreferenceGroup.getContext().obtainStyledAttributes(null,
R.styleable.RoundCornerPreference, 0, 0);
mIsRoundCornerPreference = a.getBoolean(R.styleable.RoundCornerPreference_isRoundCorner, false);
a.recycle();
//end by liweiping 20140523
syncMyPreferences();
}
③.须要在attrs.xml中添加一个属性,详细例如以下(另外一个属性是我新增的一个ListView的Style,临时忽略掉吧):
<declare-styleable name="RoundCornerPreference">
<attr name="isRoundCorner" format="boolean" />
<attr name="listViewStyleTopwise" format="reference" />
</declare-styleable>
④.我们在theme.xml中新增一个主题(注意在public.xml文件里注冊,否则编译时可能会报错,找不到该主题)继承系统自带的主题。比方说Theme.Holo或者Theme.Holo.Light,在该主题的子节点中将attrs.xml中的isRoundCorner属性赋值为true。
例如以下所看到的(我这里还又一次赋值一下系统其他属性,请忽视):
<style name="Theme.Holo.Light.Topwise">
<item name="listSeparatorTextViewStyle">@android:style/Widget.Holo.Light.TextView.ListSeparator.Topwise</item>
<item name="textAppearanceMedium">@android:style/TextAppearance.Holo.Light.Medium.Topwise</item>
<item name="isRoundCorner">true</item>
<item name="listViewStyleTopwise">@android:style/Widget.Holo.Light.ListView.Topwise</item>
<item name="textColorSecondary">@android:drawable/selector_text_summary</item>
<item name="textAppearanceSmall">@android:style/TextAppearance.Holo.Light.Small.Topwise</item>
</style>
⑤.将我们的Settings应用的主题改动为新增的Theme.Holo.Light.Topwise。这样就基本上完工了,圆角风格的选择项仅仅会影响到设置应用。其他应用还是会和之前一样的风格。
总结:假设读者能非常好的理解了attrs.xml、styles.xml、themes.xml、public.xml这几个文件直接的关系。就应该非常easy想到通过这种方式来实现多样的配置、多样的主题。
事实上。參考小米、OPPO、魅族等主流厂商的设计,他们有自己封装一个framework,也就是说,自己系统应用使用的是自己的framework。第三方应用使用的是原生的framework。这样能非常方便的添加各种新功能、新接口。同一时候还不至于影响到第三方应用。
这是一个非常好的办法,但也是有缺点的:占用手机空间会加大(这对于眼下动则16GB、64GB的手机来说事实上也是九牛一毛)。所以,这也是一个大势所趋。
好了,今天就和大家分析到这里,关于第二个问题的改动,下次再分析。
谢谢!
假设有什么问题,欢迎留言讨论。
Android4.0设置界面改动总结(二)的更多相关文章
- Android4.0设置界面改动总结(三)
Android4.0设置界面改动总结大概介绍了一下设置改tab风格,事实上原理非常easy,理解两个基本的函数就可以: ①.invalidateHeaders(),调用此函数将又一次调用onBuild ...
- Android常用控件之Fragment仿Android4.0设置界面
Fragment是Android3.0新增的概念,是碎片的意思,它和Activity很相像,用来在一个Activity中描述一些行为或部分用户界面:使用多个Fragment可以在一个单独的Activi ...
- Android4.0图库Gallery2代码分析(二) 数据管理和数据加载
Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报 代码分析android相册优化工作 Androi ...
- android4.0默认界面旋转180
不巧新拿的android4.0默认启动画面和正常显示旋转了180度,即为倒立的.原来是屏输出为倒的,查找得知可以做旋转: 步骤: 一:先把这个加上 然后加上属性ro.sf.hwrotation = 1 ...
- Android4.0设置接口变更摘要(四)
为了与你之前,你已经设置了共享Tab风格和Item实现圆角.希望能给有须要的朋友一点点帮助,今天再和大家分享一下用ViewPager实现设置分页,小米和OPPO就是这种设置,先来看看效果图: wate ...
- iOS开发 - 如何跳到系统设置里的各种设置界面
在iOS开发中,有时会有跳转系统设置界面的需求,例如提示用户打开蓝牙或者WIFI,提醒用户打开推送或者位置权限等.在iOS6之后,第三方应用需要跳转系统设置界面,需要在URL type中添加一个pre ...
- Android4.0的Alertdialog对话框,设置点击其他位置不消失
Android4.0以上AlertDialog,包括其他自定义的dialog,在触摸对话框边缘外部,对话框消失. 可以设置这么一条属性,当然必须先AlertDialog.Builder.create( ...
- Android4.0+锁屏程序开发——设置锁屏页面篇
[如何开发一个锁屏应用] 想要开发一个锁屏应用,似乎很难,其实并没有想象中那么难. 从本质上来说,锁屏界面也只是一个Activity而已,只是这个界面比较特殊,在我们点亮屏幕的时候,这个界面就会出现. ...
- iOS开发——开发必备OC篇&UITableView设置界面完整封装(二)
UITableView设置界面完整封装(二) 简单MVC实现UITableView设置界面之Cell右边类型设置 首先来看看第一种方法证明使用,结合两种方法之后根据个人的爱好去选择就可以了, 一:使用 ...
随机推荐
- Linux - 目录结构与查看,复制,删除,剪切指令
Linux当中,一切皆文件. Linux目录结构 / 根分区,只有root用户对此目录拥有写权限. /etc 配置文件 /boot 启动文件 /var 可增长的目录 .日志,文件等. /root 管理 ...
- hdu 1085(普通母函数)
Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- Node.js:路由
ylbtech-Node.js:路由 1.返回顶部 1. Node.js 路由 我们要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码. 因 ...
- 26. Remove Duplicates from Sorted Array[E]删除排序数组中的重复项
题目 Given a sorted array nums, remove the duplicates in-place such that each element appear only once ...
- 树莓派-基于aria2实现离线下载
安装aria2 aria2是linux下的一个下载工具,它支持http.bt种子.磁力链接三种方式下载 sudo apt-get install aria2 配置aria2 aria2支持命令参数,也 ...
- html5和css3的笔记
h5+c3 W3C盒子模型和ie盒子模型 文档<!DOCTYPE html>加上的话,所有浏览器都按照W3C的盒子模型,否则ie会按照ie的盒子模型,它的content包括了padding ...
- RocketMQ之消息中间件需要解决的问题
消息中间件需要解决哪些问题 1.Publish/Subscribe(发布订阅) 发布订阅是消息中间件最基本的功能 2.Message Priority(消息优先级) 在消息队列中,每条消息都有不同的优 ...
- css 画三角形
<div class='triangle-rihgt'></div> <div class='triangle-top'></div> <div ...
- call by value 和 call by reference 的区别
引用自https://zhidao.baidu.com/question/340173099.html Call by Value就是传值的方式,函数调用时是把实参的值传给形参,函数调用结束后形参的值 ...
- 在无任何报错的情况下 pagehelper.startpage分页无效问题
问题原因:自从spring boot开始使用2.0x版本以上后,很多相应的依赖文件版本开始变化 该版本为spring-boot 1.4.1 <dependency> <groupId ...