首頁 > Java > java教程 > 主體

Android 開發中一些很有用但你不知道的方法

高洛峰
發布: 2017-02-08 10:33:23
原創
1267 人瀏覽過

setBackgroundResource(0) 可以移除View 的背景色

Resources.getSystem().getDisplayMetrics().density 可以不用Context 也能取得螢幕密度哦

透過重載的新蒙版效果可以實現一個簡單的遮罩效果。 例如下拉刷新時,可以在 contentView 上加一層遮罩。 canvas.drawRect(0, mContentView.getTranslationY(), getWidth(), getHeight(), mMaskPaint);

new 出來的View 可以用View.generateViewId() (API 17 以上可用) 產生id,系統保證唯一可用

使用GridView時android:padding 和android:clipToPadding="false" 搭配使用效果更好哦。

在版面配置檔中,如果只是為了佔位,可以用 Space 來取代 View。 最棒的一點是Space可以跳過 Draw 這個過程。

TypedValue.applyDimension(int unit, float value, DisplayMetrics metrics) 方便dp, px, sp 之間的轉換。

Activity.startActivities() 這個方法最直接的理解就是使用intent開啟多個Activity

TextUtils.isEmpty() 如果傳入的String 為NULL或Length為0的話就回傳 true。

Html.fromHtml() 如果你對Html熟悉的話,可以很迅速地透過這個方法處理一些富文本操作。例如超連結和圖文排版等處理。

TextView.setError() 設定文字方塊錯誤提醒

Build.VERSION_CODES 有些時候我們的app需要根據不同的SDK版本進行執行不同的操作

PhoneNumberUtils.convertKeypadLettersToDigits 這個字母會用鍵盤輸入的字,ToDigits上的映射轉換為數字。

ArgbEvaluator ArgbEvaluator.evaluate(float fraction, Object startValue, Object endValue);根據一個起始顏色值和一個結束顏色值以及一個偏移量產生一個新的顏色,分分鐘實現類似於微信底部欄滑動顏色漸變。

ValueAnimator.reverse() 順暢的取消動畫效果

DateUtils.formatDateTime()) 這個方法可以輸出對應格式化的時間或日期

Pair 這個類別 可以用來儲存一」組」資料。但不是key和value的關係。

SparseArray 目前有很多地方從效能最佳化方說使用SparseArray來替換hashMap,來節省內存,提高效能。

Linkify.addLinks() 這個類別可以更方便的為文字添加超連結。

android.media.ThumbnailUtils這個類別主要是用來處理縮圖相關的工作,例如:用來獲取媒體(圖片、視頻)的縮圖;

Bitmap.extractAlpha ();返回一個新的Bitmap,capture原始圖片的alpha值。有的時候我們需要動態的修改一個元素的背景圖片又不希望使用多張圖片的時候,透過這個方法,結合Canvas和Paint可以動態的修改一個純色Bitmap的顏色。

模組間有訊息需要傳遞時,使用LocalBroadcastManager取代Listener進行模組解耦。除了解耦,這樣發送訊息和執行訊息差一個線程循環,可以減少方法的呼叫鏈,我這就碰到一次方法呼叫鏈太長導致StackOverflow的問題。

靜態變數不要直接或間接引用Activity、Service等。這會使用Activity以及它所引用的所有物件無法釋放,然後,使用者操作時間一長,記憶體就會狂升。

Handler機制有一個特點是不會隨著Activity、Service的生命週期結束而結束。也就是說,如果你Post了一個Delay的Runnable,然後在Runnable執行之前退出了Activity,Runnable到時間之後還是要執行的。如果Runnable裡麵包含更新View的操作,程式崩潰了。

不少人在子執行緒中更新View時喜歡使用Context.runOnUiThread,這個方法有個缺點,就是一但Context生命週期結束,例如Activity已經銷毀時,一呼叫就會崩潰。

SharedPreferences.Editor.commit這個方法是同步的,一直到把資料同步到Flash上​​面之後才會返回,由IO操作的不可控,盡量使用apply方法代替。 apply只在API Level>=9才會支持,需要做相容。不過,最新的 support v4 包已經為我們做好了處理,使用 SharedPreferencesCompat.EditorCompat.getInstance().apply(editor) 即可。

PackageManager.getInstalledPackages這個方法經常使用,你可能不知道,當獲取的結果數量比較多​​的時候,在某些機型上面調用它花費的時間可能秒級的,所以盡量在子線程中使用。另外,如果結果太多,超過系統設定的Binder資料最大傳輸量的上限,則會發生TransactionException,如果你使用這個方法取得機器上的己安裝應用程式列表,最好做一下預防。 🎜🎜如果使用Context.startActivity啟動外部應用,最好做一下異常預防,因為尋找不到對應的應用時,會拋出異常。如果你要打開的是應用程式內的Activity,不防使用顯式Intent,這樣能提高系統搜尋目標Activity的效率。 🎜

Application的生命週期就是進程的生命週期。只有進程被幹掉時,Application才會銷毀。即使沒有Activity、Service在運行,Application也會存在。所以,為了減少記憶體壓力,盡量不要在Application裡面引用大物件、Context等。

getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);設定全螢幕方法一定要在setContentView之後

viewpager 的setCaprentItem.是不是飛行模式boolean isEnabled = Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1;

遍歷HashMap的最佳方法

public static void printMap(Map mp) {   
 for (Map.Entry m : mp.entrySet()) {  

       System.out.println(m.getKey() + ":" + m.getValue());   }
}
登入後複製

public static int randInt(int min, int max) { 
   Random rand = new Random();   
   int randomNum = rand.nextInt((max - min) + 1) + min;    
   return randomNum;
}
登入後複製
在一個

遍歷HashMap的最佳方法

rrreee

整數數

rrreee

如果子類別實作Serializable介面而父類別未實作時,父類別不會被序列化,但此時父類別必須有個無參構造方法,否則會拋InvalidClassException異常。

transient關鍵字修飾變數可以限制序列化。

當使用JakeWharton的TabPageIndicator時,如果需要先做一些耗時的操作,然後再展示TabPageIndicator的話,需要先設定mIndirector.setVisibility(View.GONE);然後耗時任務結束以後再mIndirector.setVisibility(View. VISIBLE);否則會報錯

類繼承之間的呼叫順序父類static成員-> 子類static成員-> 父類普通成員初始化和初始化塊-> 父類構造方法-> 子類普通成員初始化和初始化區塊-> 子類別建構方法

華為手機無法顯示log解決方案,.撥號介面輸入(*#*#2846579#*#*) Service menu will appear.Go to "ProjectMenu" -> "Background Setting" -> "Log Setting"Open "Log switch" and set it to ON.Open "Log level setting" and set the log level you wish.

後台service經常因為重啟之類的出現onStartCommand()中的Intent傳遞的參數為null, 透過在onStartCommand()中的回傳值改為return super.onStartCommand(intent, Service.START_REDELIVER_INTENT, startId); 可以解決問題。以下介紹幾個flag的意思Android 开发中一些很有用但你不知道的方法

不能在Activity沒有完全顯示時顯示PopupWindow和Dialog

在多進程之間不要用SharedPreferences共享數據,雖然可以(MODE_MULTI_PROCESS),但極不穩定更多

🎜🎜 Android 開發中一些很有用但你不知道的方法相關文章請關注PHP中文網! 🎜
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!