Android 5.0/5.1开发问题专贴
注:非5.0特定的开发问题,可以在这个帖子里查:Android开发问题汇总。
1、官方提供的例子android-support-v7-appcompat编译时提示android:actionModeShareDrawable属性不存在
官方例子里这个工程的target是19,需要改为21才能正确编译,否则提示“error: Error: No resource found that matches the given name: attr 'android:actionModeShareDrawable'.”。具体方法是修改project.properties文件,将target=19改为target=21,然后clean此工程或重启eclipse即可。参考链接
若仍然无法编译,可能是appcompat的版本不是最新,请通过sdk manager将support包全部升级到最新版(见下图,图片来自这里。国内用户如果无法升级,可修改hosts文件将dl-ssl.google.com静态解析到可访问的ip地址,ip地址可参考这个帖子,在超级ping里获取到)。
2、parseSDKContent failed问题
升级sdk到5.0以后,原来的Eclipse经常弹出parseSDKContent错误对话框,甚至有时会提示AndroidManifest file missing。
解决方法是删除.android目录(参考链接,在windows里这个目录是C:\Documents and Settings\YOUR_USER_NAME\.android或C:\Users\YOUR_USER_NAME\.android),不过这样会同时删除掉debug.keystore文件。也有人说不需要删除整个.android目录,更新DDMS就可以了(是指更新ADT?),但我没有试过。
3、谷歌开源的Material Design图标
可以从GitHub上下载,链接在此。另外,materialdesignicons.com和androidicons.com这两个网站也提供了一些不错的material design图标下载。
其他开源图标库:阿里巴巴提供的iconfont.cn,图标社区NounProject
在线LowPoly生成器:Trianglify
4、PreferenceActivity不显示actionbar
参考这个帖子,目前support包不支持PreferenceActivity(没有PreferenceActionbarActivity这样的类),所以解决方法要么是改用PreferenceFragment,要么使用第三方的补丁包(Fragment的方案),另一个补丁包(Activity的方案,但有缺陷——getPreferencesXmlId()只接受一个preference.xml文件)。
5、Dialog Theme的actionbar背景颜色显示不全
如下图所示,当使用Theme.AppCompat.Light.Dialog时发现actionbar背景色只显示出一半。根据这个帖子的讨论,可能是AppCompat的目前版本还没有做好。
6、使用appcompat里RecyclerView和CardView时的问题
GitHub上的这个开源项目可以帮助解决一些问题,例如添加divider、点击事件等等,但还远远不够。
CardView的多状态背景色问题,暂时没有解决,参考链接;
下拉刷新:可使用android原生的SwipeRefreshLayout解决;
上拉翻页:方案1)仍使用SwipeRefreshLayout; 方案2)自己监听事件实现Endless效果;
HeaderView:RecyclerView没有像ListView那样提供addHeaderView()方法,要实现类似效果,有两种方法:1)将第一个item作为header,使用android-parallax-recyclerview这个库; 2)让第一个item完全透明,下层显示一个同高的view作为header,使用ASOV这个库。
7、实现Material Design(简称MD)的方方面面
MD是一系列UI特性的组合,阿里巴巴团队的这个帖子介绍得清晰易懂,但要在我们的应用里逐一实现这些特性就不那么容易了,特别是要兼容Android 4.x甚至2.x的时候。Google官方AppCompat v21在这方面只提供了有限的支持,例如ActionBar和侧滑菜单,而像FAB(Fixed Action Button)等等则没有包含在内。
其实在GitHub上已经有不少第三方的实现,值得一提的是,这个名为MaterialDesignCenter的项目把大量相关项目汇总在了一起供开发者参考,值得一看。以下列出我认为值得使用的第三方实现:
FAB: FloatingActionButton
对话框: material-dialogs
各类UI控件: MaterialDesignLibrary
另外几个汇集了android上各类交互效果的项目Interactive-animation、awesome-android-ui、android-open-project(300+项目,不仅限于MD),同样值得参考。
8、使用SlidingTabLayout替代Actionbar的tab导航
v7包的Actionbar对象里,与navigation有关的方法(例如setNavigationMode)都不建议使用了,应使用googleio2014提供的SlidingTabLayout实现类似功能。
9、Android 5.1将AlarmManager的setInterval()最小值限制为1分钟
这个比较坑,毕竟有一些应用依赖AlarmManager机制进行更新,当设备升级到android 5.1后就会出现问题。由于开发文档里并没有提到,所以具体情况见googlecode上的讨论。讨论链接需FQ,google主要回复如下:
“If you are trying to run more often than every 5 seconds, alarms are the wrong way to go about it. Waking up the device that often is extremely bad for battery life. If you have live UI that needs to be updated continually, use a wakelock and then schedule your activity on a handler. This is actually *more* battery efficient than setting an alarm every second.”
替代方法是在Service里使用ScheduledExecutorService实现定时任务,与AlarmManager的区别见 参考链接
10、使用Android Support Design开发包实现Material Design
Google在2015 I/O大会推出了Android Support Design开发包,方便开发者实现多种常用的MD效果。以下几个有用链接:
INTRODUCTION TO COORDINATOR LAYOUT ON ANDROID
高逼格UI-ASD(Android Support Design)
Android Design Support Library使用详解
(未完待续)