Android 5.0/5.1开发问题专贴

注:非5.0特定的开发问题,能够在这个帖子里查:Android开发问题汇总html

一、官方提供的例子android-support-v7-appcompat编译时提示android:actionModeShareDrawable属性不存在android

官方例子里这个工程的target是19,须要改成21才能正确编译,不然提示“error: Error: No resource found that matches the given name: attr 'android:actionModeShareDrawable'.”。具体方法是修改project.properties文件,将target=19改成target=21,而后clean此工程或重启eclipse便可。参考连接git

若仍然没法编译,多是appcompat的版本不是最新,请经过sdk manager将support包所有升级到最新版(见下图,图片来自这里。国内用户若是没法升级,可修改hosts文件将dl-ssl.google.com静态解析到可访问的ip地址,ip地址可参考这个帖子,在超级ping里获取到)。github

二、parseSDKContent failed问题swift

升级sdk到5.0之后,原来的Eclipse常常弹出parseSDKContent错误对话框,甚至有时会提示AndroidManifest file missing。windows

解决方法是删除.android目录(参考连接,在windows里这个目录是C:\Documents and Settings\YOUR_USER_NAME\.android或C:\Users\YOUR_USER_NAME\.android),不过这样会同时删除掉debug.keystore文件。也有人说不须要删除整个.android目录,更新DDMS就能够了(是指更新ADT?),但我没有试过。app

三、谷歌开源的Material Design图标less

能够从GitHub上下载,连接在此。另外,materialdesignicons.comandroidicons.com这两个网站也提供了一些不错的material design图标下载。eclipse

其余开源图标库:阿里巴巴提供的iconfont.cn,图标社区NounProjectide

在线LowPoly生成器:Trianglify

四、PreferenceActivity不显示actionbar

参考这个帖子,目前support包不支持PreferenceActivity(没有PreferenceActionbarActivity这样的类),因此解决方法要么是改用PreferenceFragment,要么使用第三方的补丁包(Fragment的方案),另外一个补丁包(Activity的方案,但有缺陷——getPreferencesXmlId()只接受一个preference.xml文件)。

五、Dialog Theme的actionbar背景颜色显示不全

以下图所示,当使用Theme.AppCompat.Light.Dialog时发现actionbar背景色只显示出一半。根据这个帖子的讨论,多是AppCompat的目前版本尚未作好。

六、使用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这个库。

七、实现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-animationawesome-android-uiandroid-open-project(300+项目,不只限于MD),一样值得参考。

八、使用SlidingTabLayout替代Actionbar的tab导航

v7包的Actionbar对象里,与navigation有关的方法(例如setNavigationMode)都不建议使用了,应使用googleio2014提供的SlidingTabLayout实现相似功能。

参考连接1参考连接2

九、Android 5.1将AlarmManager的setInterval()最小值限制为1分钟

这个比较坑,毕竟有一些应用依赖AlarmManager机制进行更新,当设备升级到android 5.1后就会出现问题。因为开发文档里并无提到,因此具体状况见googlecode上的讨论。讨论连接需翻墙,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的区别见 参考连接

十、使用Android Support Design开发包实现Material Design

Google在2015 I/O大会推出了Android Support Design开发包,方便开发者实现多种经常使用的MD效果。如下几个有用连接:

INTRODUCTION TO COORDINATOR LAYOUT ON ANDROID

(译)掌握 Coordinator Layout 

高逼格UI-ASD(Android Support Design)

NestedScrollView

CoordinatorLayout与滚动的处理

Android Design Support Library使用详解

(未完待续)