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右边类型设置 首先来看看第一种方法证明使用,结合两种方法之后根据个人的爱好去选择就可以了, 一:使用 ...
随机推荐
- ReflectionSugar 通用反射类
http://www.cnblogs.com/sunkaixuan/p/4635710.html
- 【HAOI 2008】 移动玩具
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1054 [算法] 广度优先搜索 [代码] #include<bits/stdc+ ...
- 函数和指针 C++
一.用函数指针变量调用函数. 指针变量也可以指向一个函数,一个函数在编译时被分配给一个入口地址.这个函数入口地址就称为函数的指针.可以用一个指针变量指向函数,然后通过该指针变量调用此函数. 定义指向函 ...
- Asura监控---AsuraMonitor,阿修罗监控开源
阿修罗Monitor是一个功能强大.灵活的监控系统. 系统安装简单,配置简单,相比zabbix, nagios,cacti,小米监控等都使用相当简单.只需要会写脚本,语言不限就可以实现任意监控需求. ...
- IO编程 - 转载自廖雪峰的博文
IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口. 比如你打开 ...
- gitlab quickly install
一.安装gitlab依赖环境 yum -y install vim wget epel-release yum install curl policycoreutils openssh-server ...
- 9) 十分钟学会android--使用Fragment建立动态UI
为了在 Android 上为用户提供动态的.多窗口的交互体验,需要将 UI 组件和 Activity 操作封装成模块进行使用,这样我们就可以在 Activity 中对这些模块进行切入切出操作.可以用 ...
- 用css修改HTML5 input placeholder颜色
使用CSS修改HTML5 input placeholder颜色 本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和 ...
- readonly and const variable
共同点:都是常量: 不同点:const的值必须在编译前确定,通常在声明的同时赋值:而readonly可在运行时确定:
- OnLineML:时序数据挖掘
关于时序分析: 我们跟随时间的脚步,试图解释现在.理解过去.甚至预测未来........ 原文链接:http://blog.sciencenet.cn/home.php?mod=space&u ...