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右边类型设置 首先来看看第一种方法证明使用,结合两种方法之后根据个人的爱好去选择就可以了, 一:使用 ...
随机推荐
- Reset and Clear Recent Items and Frequent Places in Windows 10
https://www.tenforums.com/tutorials/3476-reset-clear-recent-items-frequent-places-windows-10-a.html ...
- [POJ 1639] Picnic Planning
[题目链接] http://poj.org/problem?id=1639 [算法] 首先,我们可以用深度优先遍历求出1号节点去除后有几个联通块 设共有T个联通块,若T > K则无解,否则 : ...
- java javax.annotation.Resource注解的详解
转自:https://www.jb51.net/article/95456.htm java 注解:java javax.annotation.Resource 当我们在xml里面为类配置注入对象时 ...
- php 0,null,empty,空,false,字符串关系(转)
在php中由于是弱类型语言,不同类型值之间可以隐式转换,使得false,null,”,0,’0′这几个值的比较有些混乱,现总结一下: //相等判断 '' == NULL == 0 == false ( ...
- MarkDownPad 注册码
邮箱: Soar360@live.com 授权秘钥: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2M5SN6b ...
- B - Beautiful Year
Problem description It seems like the year of 2013 came only yesterday. Do you know a curious fact? ...
- laydate.js时间选择
例子: <asp:HiddenField ID="hfdDateBuid3" runat="server" /> <script type=& ...
- 云信 短信发送 demo
package com.dataTaskListener; import org.apache.commons.httpclient.Header; import org.apache.commons ...
- IE兼容opacity
filter:alpha(opacity=80); opacity: 0.57; /* Firefox, Safari(WebKit), Opera) filter: "alpha(opac ...
- 07 --C语言字符串函数
1)字符串操作 复制 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strdup(char *str) 将串拷贝到新建的位置处 ...