Android開發貼士集合(Part 1~4)

jobbole發表於2014-05-20

  近期的專案中本人已經每天發表一個關於 Android 的類和方法的小貼士,很多讀者要求整理出這些小貼士的連結歸檔,所以每隔幾周我都會總結一下。如果工作不是太忙的話,我也會在上面做一些註釋。

Android開發貼士集合(Part 1~4)

  Android 開發貼士集合(1)

  Activity.startActivities ()——對於從 app 流的中部啟動會非常好。

  TextUtils.isEmpty ()——一個普遍適用的簡單工具類。

  Html.fromHtml ()——格式化 Html 的快速方法,本人認為它也不是非常快,所以我不是經常用它(我說不經常用它是為了重點突出這句話:請多手動構建 Spannable 來替換 Html.fromHtml),但是它對渲染從 web 上獲取的文字還是很不錯的。

  TextView.setError ()——在驗證使用者輸入的時候使用者體驗很不錯。

  Build.VERSION_CODES——它不僅僅描述了版本號,還總結了各 Android 版本的不同特性。

  Log.getStackTraceString ()——方便的日誌工具。

  LayoutInflater.from ()——簡化一系列冗長的 getSystemService ()呼叫的簡單工具。

  ViewConfiguration.getScaledTouchSlop ()——使用 ViewConfiguration 中提供的值以保證所有觸控的互動都是統一的。

  PhoneNumberUtils.convertKeypadLettersToDigits——使得處理電話號碼更方便,很多人都只提供字母,而不是數字。

  Context.getCacheDir ()——使用系統提供的快取目錄進行資料快取,操作非常簡單不過很多人不知道怎麼使用。

  ArgbEvaluators——處理顏色的漸變。就像 Chris Banes 說的一樣,這個類會進行很多自動裝箱的操作,所以最好還是去掉它的邏輯自己去實現它。

  ContextThemeWrapper——方便在執行過程中更改主題。

  Space——輕量級的檢視元件,可以跳過繪製的過程,對於需要佔位符的任何場景來說都是很棒的。

  ValueAnimator.reverse ()——可以順暢地取消動畫效果,很贊。

Android開發貼士集合(Part 1~4)

  Android 開發貼士集合(2)

  DateUtils.formatDateTime ()——提供區域格式化時間/日期字串的一站式服務。

  AlarmManager.setInexactRepeating——通過鬧鈴分組的方式來節省電量,即使你只呼叫一個 alarm 例項,它仍然比較好用(可以確保在使用完畢時自動呼叫 AlarmManager.cancel ()。

  Formatter.formatFileSize ()——一個區域化的檔案大小格式化工具。

  ActionBar.hide () / .show ()——可以在 actionBar 顯示或者隱藏的時候進行動畫展示。可以在切換到全屏的時候更優雅。

  Linkify.addLinks ()——可以控制在 Text 上新增連結。

  StaticLayout——在自定義 View 中渲染文字的時候很實用。

  Activity.onBackPressed ()——方便控制返回按鈕,在需要自定義返回鍵的操作時候,可以用到。

  GestureDetector——可以監聽動作事件和相關的監聽器事件(點選,滾動,滑動等)。比自己實現系統的一些動作事件更簡單。

  DrawFilter——可以讓你操作 Canvas,即使沒有呼叫 draw 方法。例如,可以在建立自定義 View 的時候設定一個 DrawFilter,給父 View 裡面的所有 View 設定反別名。

  ActivityManager.getMemoryClass ()——可以讓你清楚知道裝置還剩多少記憶體。在計算怎麼設定快取大小的時候就很有用。

  SystemClock.sleep ()——這個方法在保證一定時間的 sleep 時很方便,通常我用來進行 debug 和模擬網路延時。

  ViewStub——它是一個初始化不做任何事情的 View,但是之後可以載入一個佈局檔案。在慢載入 View 中很適合做佔位符。唯一的缺點就是不支援標籤,所以如果你不太小心的話,可能會在檢視結構中加入不需要的巢狀。

  DisplayMetrics.density——通過這個方法可以獲取螢幕的密度,很多時候需要去掉系統自動縮放精度的功能,但是有時候在控制的時候也很有用(尤其是在自定義 View 的時候)。

  Pair.create ()——方便構建類和構造器的方法。

Android開發貼士集合(Part 1~4)

  Android 開發貼士集合(3)

  UrlQuerySanitizer——使用這個工具可以方便對 URL 進行檢查。

  Fragment.setArguments——因為在構建 Fragment 的時候不能加引數,所以這是個很好的東西,可以在建立 Fragment 之前設定引數(即使在 configuration 改變的時候仍然會導致銷燬/重建)。

  DialogFragment.setShowsDialog ()—— 這是一個很巧妙的方式,DialogFragment 可以作為正常的 Fragment 顯示!這裡可以讓 Fragment 承擔雙重任務。我通常在建立 Fragment 的時候把 onCreateView ()和 onCreateDialog ()都加上,就可以建立一個具有雙重目的的 Fragment。

  FragmentManager.enableDebugLogging ()——在需要觀察 Fragment 狀態的時候會有幫助。

  LocalBroadcastManager——這個會比全域性的 broadcast 更加安全,簡單,快速。像 otto 這樣的 Event buses 機制對你的應用場景更加有用。

  PhoneNumberUtils.formatNumber ()——顧名思義,這是對數字進行格式化操作的時候用的。

  Region.op ()——我發現在對比兩個渲染之前的區域的時候很實用,如果你有兩條路徑,那麼怎麼知道它們是不是會重疊呢?使用這個方法就可以做到。

  Application.registerActivityLifecycleCallbacks——雖然缺少官方文件解釋,不過我想它就是註冊 Activity 的生命週期的一些回撥方法(顧名思義),就是一個方便的工具。

  versionNameSuffix——這個 gradle 設定可以讓你在基於不同構建型別的 manifest 中修改版本名這個屬性,例如,如果需要在在 debug 版本中以”-SNAPSHOT”結尾,那麼就可以輕鬆的看出當前是 debug 版還是 release 版。

  CursorJoiner——如果你是隻使用一個資料庫的話,使用 SQL 中的 join 就可以了,但是如果收到的資料是來自兩個獨立的 ContentProvider,那麼 CursorJoiner 就很實用了。

  Genymotion——一個非常快的 Android 模擬器,本人一直在用。

  -nodpi——在沒有特別定義的情況下,很多修飾符(-mdpi,-hdpi,-xdpi 等等)都會預設自動縮放 assets/dimensions,有時候我們需要保持顯示一致,這種情況下就可以使用 -nodpi。

  BroadcastRecevier.setDebugUnregister ()——又一個方便的除錯工具。

  Activity.recreate ()——強制讓 Activity 重建。

  PackageManager.checkSignatures ()——如果同時安裝了兩個 app 的話,可以用這個方法檢查。如果不進行簽名檢查的話,其他人可以輕易通過使用一樣的包名來模仿你的 app。

Android開發貼士集合(Part 1~4)

  Android 開發貼士集合(4)

  Activity.isChangingConfigurations ()——如果在 Activity 中 configuration 會經常改變的話,使用這個方法就可以不用手動做儲存狀態的工作了。

  SearchRecentSuggestionsProvider——可以建立最近提示效果的 provider,是一個簡單快速的方法。

  ViewTreeObserver——這是一個很棒的工具。可以進入到 VIew 裡面,並監控 View 結構的各種狀態,通常我都用來做 View 的測量操作(自定義檢視中經常用到)。

  org.gradle.daemon=true——這句話可以幫助減少 Gradle 構建的時間,僅在命令列編譯的時候用到,因為 Android Studio 已經這樣使用了。

  DatabaseUtils——一個包含各種資料庫操作的使用工具。

  android:weightSum (LinearLayout)——如果想使用 layout weights,但是卻不想填充整個 LinearLayout 的話,就可以用 weightSum 來定義總的 weight 大小。

  android:duplicateParentState (View)——此方法可以使得子 View 可以複製父 View 的狀態。比如如果一個 ViewGroup 是可點選的,那麼可以用這個方法在它被點選的時候讓它的子 View 都改變狀態。

  android:clipChildren (ViewGroup)——如果此屬性設定為不可用,那麼 ViewGroup 的子 View 在繪製的時候會超出它的範圍,在做動畫的時候需要用到。

  android:fillViewport (ScrollView)——在這片文章中有詳細介紹文章連結,可以解決在 ScrollView 中當內容不足的時候填不滿螢幕的問題。

  android:tileMode (BitmapDrawable)——可以指定圖片使用重複填充的模式。

  android:enterFadeDuration/android:exitFadeDuration (Drawables)——此屬性在 Drawable 具有多種狀態的時候,可以定義它展示前的淡入淡出效果。

  android:scaleType (ImageView)——定義在 ImageView 中怎麼縮放/剪裁圖片,一般用的比較多的是“centerCrop”和“centerInside”。

  ——此標籤可以在另一個佈局檔案中包含別的佈局檔案,而不用再新建一個 ViewGroup,對於自定義 ViewGroup 的時候也需要用到;可以通過載入一個帶有標籤的佈局檔案來自動定義它的子部件。

  AtomicFile——通過使用備份檔案進行檔案的原子化操作。這個知識點之前我也寫過,不過最好還是有出一個官方的版本比較好。

  英文原文:Android Tips Round-Up(More: Part 1 Part 2 Part 3 Part 4

  翻譯: 伯樂線上 - chris

相關文章