注:非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使用詳解
(未完待續)