1. 程式人生 > >Android開發中一些被冷落但卻很有用的類和方法

Android開發中一些被冷落但卻很有用的類和方法

來自:http://luckyandyzhang.github.io/

Resources.getIdentifier :

這個我 用過,記得以前做過一個面板切換功能,可以通過這個方法從面板包 獲取面板資源。

(面板包的資源名稱和 主包的資源名稱id 名是一樣的,因此都是通過名稱獲取id ,而不是R.id.xxx)


Android:clipToPadding  : 經常有這種業務場景。

MediaMetadataRetriever

顧名思義,就是用來獲取媒體檔案一些相關資訊的類。包括一首歌的標題,作者,專輯封面和名稱,時長,位元率等等。如果是視訊的話,可以獲取視訊的長寬,預覽圖。

TouchDelegate

用於更改View的觸控區域。場景:比如在RecyclerView的ItemView裡包含了CheckBox元件, 然後想實現點選ItemView的時候,也可以觸發CheckBox,就可以使用此類。

ArgbEvaluator

用於計算不同顏色值之間的插值,配合ValueAnimator.ofObject或者ViewPager.PageTransformer使用,可以實現不同顏色之間的平滑過渡。

Palette

用於提取一張圖片的顏色。

ViewDragHelper

做過自定義ViewGroup的童鞋都應該知道這個東西吧,用來處理觸控事件的神器,媽媽再也不用擔心我自定義控制元件了。

PageTransformer

用於定義ViewPager頁面切換時的動畫效果(淡入淡出,放大縮小神馬的…)官方有例子,直接看吧。

ViewFlipper

可以實現簡單輪播效果的一個元件。

LocalBroadcastManager

用於在APP內部使用的,效率和安全性更好的廣播工具類。

Messenger

程序間通訊的一個工具類。內部也是由AIDL實現的,但是用起來超級方便。

Formatter.formatFileSize

根據檔案大小自動轉為以KB, MB, GB為單位的工具類。想想以前都是自己計算的…

Activity.recreate

重新建立Activity。有什麼用呢?可以在程式更換主題後,立馬重新整理當前Activity,而不會有明顯的重啟Activity的動畫。

View.getContext

顧名思義,就不用解釋了吧…以前在寫RecyclerView的Adapter的時候,為了使用LayoutInflater,經常傻乎乎地在建構函式中傳入一個外部的context….是不是隻有我不知道而已(笑cry臉)

View.post

方便在非UI執行緒對介面進行修改,與Handler的作用類似。並且由於post的Runnable會保證在該View繪製完成的前提下才呼叫,所以一般也可以用於獲取View的寬高。

Activity.runOnUiThread

View.post類似,方便在非UI執行緒中對介面進行修改。

Fragment.setUserVisibleHint

Fragment可以重寫此方法,然後根據引數的布林值(true的話表示當前Fragment對使用者可見),來執行一些邏輯。

android:animateLayoutChanges

這是一個非常酷炫的屬性。在父佈局加上 android:animateLayoutChanges="true" 後,如果觸發了layout方法(比如它的子View設定為GONE),系統就會自動幫你加上佈局改變時的動畫特效!!

android:clipToPadding

設定父view是否允許其子view在它的padding(這裡指的是父View的padding)中繪製。是不是有點繞?舉個實際場景吧:假如有個ListView,我們想要在初始位置時,第一項Item離頂部有10dp的距離,就可以在ListView的佈局中加入android:clipToPadding="false" android:paddingTop="10dp"即可。是不是很方便呢?


DrawableCompat.setTint

位於support-v4包中,可以輕易地實現給Drawable著色。輕鬆實現類似網易雲音樂自定義主題時,icon也會變色的效果。

ItemTouchHelper

用來實現RecyclerView滑動刪除,拖動排序等效果的工具類,重要的是,實現起來超級簡單啊!可以不用引入開源庫啦~

SortedList

排序列表,support-v7引入的一個新的資料結構。配合RecyclerView使用,可以輕鬆地對Adapter的資料進行排序,並且在資料變化時(新增,刪除,移動,改變)提供相應的動畫效果。

DialogFragment

與直接使用Dialog不同的是,DialogFragment能夠幫你管理Dialog的生命週期,在橫豎屏切換的時候,會儲存相應狀態並恢復。以後就不要直接用Dialog了,使用DialogFragment可以幫你省很多事。

Resources.getIdentifier

可以通過資源名稱來獲取資源的id。乍一看好像沒什麼卵用… 舉個例子吧: 假設服務端的API規定了一系列的錯誤碼,當客戶端收到錯誤碼時,需要轉化為對使用者友好的提示語。那麼我們可以在strings.xml中先定義好一系列的錯誤提示,然後在程式碼中根據相應的資源名稱來獲取到相應的錯誤提示。

DateUtils

一個用來格式化日期的超級方便的工具類,快點試試吧~

TextUtils

一個字串處理的工具類。比如空判斷TextUtils.isEmpty(內部已經做了!null處理), 文字拼接TextUtils.concat, 統計字串除去空格的長度TextUtils.getTrimmedLength(trim之後的長度)

android:enterFadeDuration/android:exitFadeDuration

覺得Button的selector效果很生硬?試試在selector節點加上這兩個屬性吧,馬上就優雅很多了~

?android:selectableItemBackground

想要最快速度地給view加上點選效果?試試在xml中加上 android:background="?android:selectableItemBackground"Android 5.0以上是波紋效果,5.0以下是普通的點選效果(簡言之,跟系統預設點選效果一致)