????????英文原文: Android Tips Round-Up (More:? Part 1 ? Part 2 ? Part 3 ? Part 4 )
????????近期的項(xiàng)目中本人已經(jīng)每天發(fā)表一個(gè)關(guān)于 Android 的類和方法的小貼士,很多讀者要求整理出這些小貼士的鏈接歸檔,所以每隔幾周我都會(huì)總結(jié)一下。如果工作不是太忙的話,我也會(huì)在上面做一些注釋。
???????? Android 開(kāi)發(fā)貼士集合(1)
???????? Activity.startActivities () ——對(duì)于從 app 流的中部啟動(dòng)會(huì)非常好。
???????? TextUtils.isEmpty () ——一個(gè)普遍適用的簡(jiǎn)單工具類。
???????? Html.fromHtml () ——格式化 Html 的快速方法,本人認(rèn)為它也不是非常快,所以我不是經(jīng)常用它(我說(shuō)不經(jīng)常用它是為了重點(diǎn)突出這句話:請(qǐng)多手動(dòng)構(gòu)建 Spannable 來(lái)替換 Html.fromHtml),但是它對(duì)渲染從 web 上獲取的文字還是很不錯(cuò)的。
???????? TextView.setError () ——在驗(yàn)證用戶輸入的時(shí)候用戶體驗(yàn)很不錯(cuò)。
???????? Build.VERSION_CODES ——它不僅僅描述了版本號(hào),還總結(jié)了各 Android 版本的不同特性。
???????? Log.getStackTraceString () ——方便的日志工具。
???????? LayoutInflater.from () ——簡(jiǎn)化一系列冗長(zhǎng)的 getSystemService ()調(diào)用的簡(jiǎn)單工具。
???????? ViewConfiguration.getScaledTouchSlop () ——使用 ViewConfiguration 中提供的值以保證所有觸摸的交互都是統(tǒng)一的。
???????? PhoneNumberUtils.convertKeypadLettersToDigits ——使得處理電話號(hào)碼更方便,很多人都只提供字母,而不是數(shù)字。
???????? Context.getCacheDir () ——使用系統(tǒng)提供的緩存目錄進(jìn)行數(shù)據(jù)緩存,操作非常簡(jiǎn)單不過(guò)很多人不知道怎么使用。
???????? ArgbEvaluators ——處理顏色的漸變。就像? Chris Banes ?說(shuō)的一樣,這個(gè)類會(huì)進(jìn)行很多自動(dòng)裝箱的操作,所以最好還是去掉它的邏輯自己去實(shí)現(xiàn)它。
???????? ContextThemeWrapper ——方便在運(yùn)行過(guò)程中更改主題。
???????? Space ——輕量級(jí)的視圖組件,可以跳過(guò)繪制的過(guò)程,對(duì)于需要占位符的任何場(chǎng)景來(lái)說(shuō)都是很棒的。
???????? ValueAnimator.reverse () ——可以順暢地取消動(dòng)畫(huà)效果,很贊。
???????? Android 開(kāi)發(fā)貼士集合(2)
???????? DateUtils.formatDateTime () ——提供區(qū)域格式化時(shí)間/日期字符串的一站式服務(wù)。
???????? AlarmManager.setInexactRepeating ——通過(guò)鬧鈴分組的方式來(lái)節(jié)省電量,即使你只調(diào)用一個(gè) alarm 實(shí)例,它仍然比較好用(可以確保在使用完畢時(shí)自動(dòng)調(diào)用 AlarmManager.cancel ()。
???????? Formatter.formatFileSize () ——一個(gè)區(qū)域化的文件大小格式化工具。
???????? ActionBar.hide () ?/? .show () ——可以在 actionBar 顯示或者隱藏的時(shí)候進(jìn)行動(dòng)畫(huà)展示。可以在切換到全屏的時(shí)候更優(yōu)雅。
???????? Linkify.addLinks () ——可以控制在 Text 上添加鏈接。
???????? StaticLayout ——在自定義 View 中渲染文字的時(shí)候很實(shí)用。
???????? Activity.onBackPressed () ——方便控制返回按鈕,在需要自定義返回鍵的操作時(shí)候,可以用到。
???????? GestureDetector ——可以監(jiān)聽(tīng)動(dòng)作事件和相關(guān)的監(jiān)聽(tīng)器事件(點(diǎn)擊,滾動(dòng),滑動(dòng)等)。比自己實(shí)現(xiàn)系統(tǒng)的一些動(dòng)作事件更簡(jiǎn)單。
???????? DrawFilter ——可以讓你操作 Canvas,即使沒(méi)有調(diào)用 draw 方法。例如,可以在創(chuàng)建自定義 View 的時(shí)候設(shè)置一個(gè) DrawFilter,給父 View 里面的所有 View 設(shè)置反別名。
???????? ActivityManager.getMemoryClass () ——可以讓你清楚知道設(shè)備還剩多少內(nèi)存。在計(jì)算怎么設(shè)置緩存大小的時(shí)候就很有用。
???????? SystemClock.sleep () ——這個(gè)方法在保證一定時(shí)間的 sleep 時(shí)很方便,通常我用來(lái)進(jìn)行 debug 和模擬網(wǎng)絡(luò)延時(shí)。
???????? ViewStub ——它是一個(gè)初始化不做任何事情的 View,但是之后可以載入一個(gè)布局文件。在慢加載 View 中很適合做占位符。唯一的缺點(diǎn)就是不支持標(biāo)簽,所以如果你不太小心的話,可能會(huì)在視圖結(jié)構(gòu)中加入不需要的嵌套。
???????? DisplayMetrics.density ——通過(guò)這個(gè)方法可以獲取屏幕的密度,很多時(shí)候需要去掉系統(tǒng)自動(dòng)縮放精度的功能,但是有時(shí)候在控制的時(shí)候也很有用(尤其是在自定義 View 的時(shí)候)。
???????? Pair.create () ——方便構(gòu)建類和構(gòu)造器的方法。
???????? Android 開(kāi)發(fā)貼士集合(3)
???????? UrlQuerySanitizer ——使用這個(gè)工具可以方便對(duì) URL 進(jìn)行檢查。
???????? Fragment.setArguments ——因?yàn)樵跇?gòu)建 Fragment 的時(shí)候不能加參數(shù),所以這是個(gè)很好的東西,可以在創(chuàng)建 Fragment 之前設(shè)置參數(shù)(即使在 configuration 改變的時(shí)候仍然會(huì)導(dǎo)致銷(xiāo)毀/重建)。
???????? DialogFragment.setShowsDialog () —— 這是一個(gè)很巧妙的方式,DialogFragment 可以作為正常的 Fragment 顯示!這里可以讓 Fragment 承擔(dān)雙重任務(wù)。我通常在創(chuàng)建 Fragment 的時(shí)候把 onCreateView ()和 onCreateDialog ()都加上,就可以創(chuàng)建一個(gè)具有雙重目的的 Fragment。
???????? FragmentManager.enableDebugLogging () ——在需要觀察 Fragment 狀態(tài)的時(shí)候會(huì)有幫助。
???????? LocalBroadcastManager ——這個(gè)會(huì)比全局的 broadcast 更加安全,簡(jiǎn)單,快速。像? otto ?這樣的 Event buses 機(jī)制對(duì)你的應(yīng)用場(chǎng)景更加有用。
???????? PhoneNumberUtils.formatNumber () ——顧名思義,這是對(duì)數(shù)字進(jìn)行格式化操作的時(shí)候用的。
???????? Region.op () ——我發(fā)現(xiàn)在對(duì)比兩個(gè)渲染之前的區(qū)域的時(shí)候很實(shí)用,如果你有兩條路徑,那么怎么知道它們是不是會(huì)重疊呢?使用這個(gè)方法就可以做到。
???????? Application.registerActivityLifecycleCallbacks ——雖然缺少官方文檔解釋,不過(guò)我想它就是注冊(cè) Activity 的生命周期的一些回調(diào)方法(顧名思義),就是一個(gè)方便的工具。
???????? versionNameSuffix ——這個(gè) gradle 設(shè)置可以讓你在基于不同構(gòu)建類型的 manifest 中修改版本名這個(gè)屬性,例如,如果需要在在 debug 版本中以”-SNAPSHOT”結(jié)尾,那么就可以輕松的看出當(dāng)前是 debug 版還是 release 版。
???????? CursorJoiner ——如果你是只使用一個(gè)數(shù)據(jù)庫(kù)的話,使用 SQL 中的 join 就可以了,但是如果收到的數(shù)據(jù)是來(lái)自兩個(gè)獨(dú)立的 ContentProvider,那么 CursorJoiner 就很實(shí)用了。
???????? Genymotion ——一個(gè)非常快的 Android 模擬器,本人一直在用。
???????? -nodpi ——在沒(méi)有特別定義的情況下,很多修飾符(-mdpi,-hdpi,-xdpi 等等)都會(huì)默認(rèn)自動(dòng)縮放 assets/dimensions,有時(shí)候我們需要保持顯示一致,這種情況下就可以使用 -nodpi。
???????? BroadcastRecevier.setDebugUnregister () ——又一個(gè)方便的調(diào)試工具。
???????? Activity.recreate () ——強(qiáng)制讓 Activity 重建。
???????? PackageManager.checkSignatures () ——如果同時(shí)安裝了兩個(gè) app 的話,可以用這個(gè)方法檢查。如果不進(jìn)行簽名檢查的話,其他人可以輕易通過(guò)使用一樣的包名來(lái)模仿你的 app。
???????? Android 開(kāi)發(fā)貼士集合(4)
???????? Activity.isChangingConfigurations () ——如果在 Activity 中 configuration 會(huì)經(jīng)常改變的話,使用這個(gè)方法就可以不用手動(dòng)做保存狀態(tài)的工作了。
???????? SearchRecentSuggestionsProvider ——可以創(chuàng)建最近提示效果的 provider,是一個(gè)簡(jiǎn)單快速的方法。
???????? ViewTreeObserver ——這是一個(gè)很棒的工具。可以進(jìn)入到 VIew 里面,并監(jiān)控 View 結(jié)構(gòu)的各種狀態(tài),通常我都用來(lái)做 View 的測(cè)量操作(自定義視圖中經(jīng)常用到)。
???????? org.gradle.daemon=true ——這句話可以幫助減少 Gradle 構(gòu)建的時(shí)間,僅在命令行編譯的時(shí)候用到,因?yàn)?Android Studio 已經(jīng)這樣使用了。
???????? DatabaseUtils ——一個(gè)包含各種數(shù)據(jù)庫(kù)操作的使用工具。
???????? android:weightSum (LinearLayout) ——如果想使用 layout weights,但是卻不想填充整個(gè) LinearLayout 的話,就可以用 weightSum 來(lái)定義總的 weight 大小。
???????? android:duplicateParentState (View) ——此方法可以使得子 View 可以復(fù)制父 View 的狀態(tài)。比如如果一個(gè) ViewGroup 是可點(diǎn)擊的,那么可以用這個(gè)方法在它被點(diǎn)擊的時(shí)候讓它的子 View 都改變狀態(tài)。
???????? android:clipChildren (ViewGroup) ——如果此屬性設(shè)置為不可用,那么 ViewGroup 的子 View 在繪制的時(shí)候會(huì)超出它的范圍,在做動(dòng)畫(huà)的時(shí)候需要用到。
???????? android:fillViewport (ScrollView) ——在這片文章中有詳細(xì)介紹 文章鏈接 ,可以解決在 ScrollView 中當(dāng)內(nèi)容不足的時(shí)候填不滿屏幕的問(wèn)題。
???????? android:tileMode (BitmapDrawable) ——可以指定圖片使用重復(fù)填充的模式。
???????? android:enterFadeDuration/android:exitFadeDuration (Drawables) ——此屬性在 Drawable 具有多種狀態(tài)的時(shí)候,可以定義它展示前的淡入淡出效果。
???????? android:scaleType (ImageView) ——定義在 ImageView 中怎么縮放/剪裁圖片,一般用的比較多的是“centerCrop”和“centerInside”。
????????——此標(biāo)簽可以在另一個(gè)布局文件中包含別的布局文件,而不用再新建一個(gè) ViewGroup,對(duì)于自定義 ViewGroup 的時(shí)候也需要用到;可以通過(guò)載入一個(gè)帶有標(biāo)簽的布局文件來(lái)自動(dòng)定義它的子部件。
???????? AtomicFile ——通過(guò)使用備份文件進(jìn)行文件的原子化操作。這個(gè)知識(shí)點(diǎn)之前我也寫(xiě)過(guò),不過(guò)最好還是有出一個(gè)官方的版本比較好。
?原文鏈接:? danlew ???翻譯:? 伯樂(lè)在線? -? chris
????????譯文鏈接:? http://blog.jobbole.com/68006/
轉(zhuǎn)載至: http://www.open-open.com/news/view/1a19946
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
