1. 程式人生 > >Android Weekly Notes Issue #236

Android Weekly Notes Issue #236

Android Weekly Issue #236

本期內容包括: Google的物聯網平臺Android Things; FileProvider; Android Studio的Layout Preview使用; Retrofit2使用; Google Sign-In和SmartLock; 把敏感資訊放入NDK的解決方式.

設計部分討論了調色盤的靈感來源和幾個開發app的時候應該注意的問題.

ARTICLES & TUTORIALS

Internet of Things (物聯網, IoT), 是網際網路, 傳統電信網等諮詢承載體, 讓所有能行使獨立功能的物品之間實現互聯互通的網路.

2016年12月, Google釋出了Android Things的開發者預覽版, 這是一個專門為IoT裝置定製的Android系統.

本篇文章一步一步地教你如何寫一個IoT的基本程式, 跑在Raspberry Pi 3 Model B上.

上次我們提到了用DownloadManager下載的東西可以和其他應用分享, 那麼如果我們下載的時候沒有用DownloadManager呢?

比較常見的情況是我們的應用需要分享內容到其他應用, 或者是檔案的型別是我們應用不能自己處理的, 需要找一個支援這種檔案型別的其他應用來幫我們開啟它.

怎麼解決呢? 答案是用FileProvider.

上一期有一篇文章也說過Android 7開始廢棄了"file://", 解決方案就是用FileProvider

, 所以實現是一樣的, 這裡就不重複了.

Layout Preview向你展示了你的xml將如何在裝置上顯示. 你可以用它檢視佈局在不同的配置下如何顯示, 比如可以切換橫豎屏, 語言等等.

但是它同樣也有一些問題:

Issue #1: Preview顯示空白
當你的佈局是由動態獲取的資料來填充的, preview不知道如何填充, 所以你看到的是空白的.

一個好的practice是使用tools名稱空間, 指定一些只在preview階段使用的屬性. 這樣你就可以指定一些text或src用來預覽.

Tip #2: 使得動態內容在Preview可見
如果你的圖片是動態資源, 你也可以設定一些最大寬高給parent view, 以防真實的圖片比期待的大太多或者是比例不對. 你可以設定tools:layout_height

tools:layout_width, 還有tools:background在preview中檢視view佔多大.

Tip #3: 修復壞掉的Previews
當你建立一個自定義View的時候, 你需要確保你的View不需要任何外部依賴即可被例項化, 否則Preview可能看不到你的View. 因為Preview不是執行在你的app上的, 它只是執行在IDE的JVM上, 所以View framework之外的東西它是訪問不到的.

解決辦法是在你的自定義View中做一些特殊處理, 比如把依賴注入放在!isInEditMode()裡, 或者用tools:名稱空間加一些預設值.

Tip #4: 佈局沒有被渲染
裡面的控制元件在preview裡會被重疊在一起.
解決的辦法是使用tools:showIn="layout", 指定具體是顯示在哪個佈局裡. 如果你有多個佈局都用到這個, 你可以選一個.

從Android Studio 2.2開始, 你可以使用tools:parentTag來指定parent的型別, 比如tools:parentTag="LinearLayout".

Tip #5: 在Preview中顯示隱藏的View
如果你在layout中把view的visibility設定為gone, 那麼它是不會在Preview中顯示的.

解決辦法: 使用tools:visibility="visible".

Android Things教程.

本篇文章以例項講述如何使用Retrofit, 雖然都是基礎內容, 但講解很詳細.

Google提供了兩種方式來幫助我們改善使用者的登入體驗:
Google Sign-In(之前被稱為Google+ Sign-In)和SmartLock.

這篇文章舉例解釋了Google Sign-In和SmartLock的實現.

Google Sign-In的部分比較簡單.

SmartLock讓我們可以:

  • 讓使用者儲存credentials.
  • 在開啟應用的時候請求credentials.
  • 使用存在Chrome上的credentials, 這樣我們的網站和app就可以共享credentials.
  • 顯示Email提示, 讓使用者選擇email地址.
  • 所有的這些資訊都儲存在Google的server裡, 使用者可以儲存或刪除.

這篇文章說敏感資訊放在Java程式碼裡不安全, 很容易被人反編譯查看出來, 如果放在NDK裡面就好一些, 你開啟檢視的只能是二進位制檔案, 很難找到.

DESIGN

作者從大自然的影象中得到顏色組合的靈感.
文章中舉了幾個例子, 如何用相關的照片找到相關主題的調色盤.

讓你的App看起來更好的幾點建議:

  • 使用同一個圖示集的圖示.
    (這裡推薦了一些圖片工具和網站.)
  • 使用Material Design設計的keylines, 使用固定的格子大小.
  • 使用顏色的時候小心一些. (這裡推薦了一些調色盤網站)
  • 選擇字型要明智一些.

LIBRARIES & CODE

模組化和可定製的Material Design UI元件. Android, iOS, Web.

Kickstarter開源了他們的Android應用.

一個kotlin寫的Android庫, 實現一種文字路徑的動畫.

包裝了Google Sign-In和SmartLock的Manager.

一個ePub閱讀器和解析框架.

對Support Library中的TextInputLayout的擴充套件, 增加了字數統計.

使用Builder模式來配置建立一個Layout的屬性.