歡迎閱讀《安卓開發的小技巧》系列的第二篇!就像我們上星期在第一篇小技巧文章裡說的那樣,這是一個不定期更新的博文系列,安卓開發團隊會在這裡和大家分享開發的建議和小技巧。
我們鼓勵團隊中的每個人每週都儘可能多地分享小技巧,儘管有些小技巧對他們來說可能是顯而易見的。畢竟,你根本不知道什麼時候,你分享的一條資訊會讓人們學到新的知識。我們真心希望這周的小技巧會對你有所幫助。
技巧 1 如果安卓在應用程式執行時,決定更新系統的網路檢視元件,這樣會使你的應用程式崩潰:http://stackoverflow.com/questions/29575313/namenotfoundexception-webview技巧 2
在 MaterialDesign 中,一些檢視必須遵循標準的填充和邊距。
除非你訓練有素能看出填充的錯誤,並且已經發現這段小技巧中每個單詞間都有兩個空格,那你還是趕緊來試試這個 app 吧,它能確保每個元素能在 app 中恰好排成一排: https://play.google.com/store/apps/details?id=com.faizmalkani.keylines
(譯者注:該段英文原文的每個單詞間有兩個空格。)
技巧 3
1 |
getChildLayoutPosition |
會返回一個(列表項)的位置,就算你從介面卡列表中移除一項(列表項也能返回),因為這個view(檢視)可能正在滑出可視區域,但是它還在RecyclerView中。
技巧 4
針對 API 23 以前版本的應用程式,GET_ACCOUNTS 是一個執行時的許可權,不能在許可權頁面上禁止它(事實上,如果這是在聯絡人群組中唯一的許可權,那麼你甚至都看不到聯絡人群組的選項)。這打破了許多 app 對存在一個使用者的假設。
技巧 5
Chrome 改變了它處理 deep links 的方式。你不可能僅僅只是在位址列中鍵入一個 URL,就能意外觸發一個 deep link。
舉個例子,你過去常常是在 Chrome 位址列鍵入“pandora.com“,就會開啟Pandora 應用程式,而不是把使用者導航到 Pandora 的網頁。新的改進是,使用者的的確確會被帶到 Pandora 的網站。
當然,為了能夠從你的網站 deep link 到一個應用程式,你需要用下面的新格式來規範連結的格式:
intent:
1 2 3 4 5 6 7 8 9 |
intent: HOST/URI-path // Optional host #Intent; package=[string]; action=[string]; category=[string]; component=[string]; scheme=[string]; end; |
例如:
1 |
<a href="intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;end"> Take a QR code </a> |
專業建議:你也可以在連結中包含一個回退的URL,或者是一個包名。這樣可以在使用者沒有安裝 app 時,提供回退的功能。
Chrome 首先會檢查回退的 URL,並將使用者導航到那裡。如果沒有提供回退的 URL,Chrome 會查詢包名,之後會把使用者帶到Play Store(安卓市場)去下載安裝包。
如果使用者沒有安裝 app 並且(連結)中也沒有提供回退地址,使用者會看到一個 404 Not Found 的頁面。在這裡可以瞭解更多資訊:https://developer.chrome.com/multidevice/android/intents
技巧 6
使用支援 23.0.0 版本 的 Loaders 時要注意,因為 Fragment 與 Activities 協同工作方式的改變,一個 bug 也隨之產生,這個 bug 會導致 Loaders 在橫豎屏切換時丟失。
這個錯誤雖然在 23.1.0版本中已經被修正了,但是依然出現了在child fragments中 Loader 在橫豎屏切換時丟失的問題。目前修正這個問題的方案就是使用低於 23.0.0 的版本。
技巧 7
在 OSX 中,你可以拖動游標到螢幕底部並且持續下拉,這樣可以在不同的螢幕中喚起 Dock 欄。
嚴格來說,這個問題與安卓無關,但是如果你的 Mac 上有多個螢幕,那麼這個問題可能時常會讓你抓狂。
如果你的 Dock 不是設定在底部而是其他地方,那麼你可以檢視一下其他情況的評論。
技巧 8
在可能的情況下,使用
1 |
Collections.emptyList() |
和
1 |
Collections.emptySet() |
而不是通過方法返回一個新的空集合。這個 collections 類負責維護一個不可變的空 list/set 例項,沒有必要新建另一個(空集合)。
打賞支援我翻譯更多好文章,謝謝!
打賞譯者
打賞支援我翻譯更多好文章,謝謝!
任選一種支付方式