一、簡介
整理Android日常開發中常用的實用工具Utils,包含Json處理、文本處理、尺寸轉換、時間處理、裝置資訊擷取、網絡、軟鍵盤、APP、SharedPreferences、Toast、Log、Runnable任務執行管理等實用工具,所有代碼已上傳至GitHub,項目以及demo位址:https://github.com/oukanggui/AndroidPracticalUtils,所有工具類集均放在utilslib這個library module裡面,app module為示範module,有興趣的同學可以下載下傳閱讀或運作demo檢視效果
二、支援工具類以及功能說明–持續更新中
1、JsonUtil:
Json操作工具類,利用Gson通過泛型實作任意對象或清單對象與Json資料的轉換,支援功能如下:
1、将任意對象或清單轉為Json字元串
2、将Json字元串轉換為任意對象或清單(通過泛型)
支援具體功能方法使用說明如下:
方法名 | 功能說明 |
---|---|
String toJson(Object object) | 将對象轉化後的Json字元串 |
T parseJson(String json, Class<T> tClass) | Json字元串轉換為泛型對象T |
List<T> parseJson(String json, Type listType) | Json字元串轉換為參數為泛型對象T的List清單 |
當将Json字元串轉化為List清單時,需要擷取List清單具體的Type對象(TypeToken),可以通過如下方式擷取:
new TypeToken<List<T>>(){}.getType()
其中T為泛型對象,在實際使用時替換為具體的實體類即可
示例如下所示:

2、TextUtil:
Text文本操作工具類TextUtil,目前支援功能如下:
1、字元串是否為空判斷
2、字元串是否全為空格判斷
3、郵箱格式判斷
4、手機号碼判斷
支援具體功能方法使用說明如下:
方法名 | 功能說明 |
---|---|
boolean isEmpty(String str) | 判斷字元串是否為空 |
boolean isBlank(final CharSequence s) | 判斷字元串是否全為空格 |
boolean isEmail(String strEmail) | 判斷一個字元串是否是郵箱格式,目前隻是簡單的通過字元串中是否含有@來判斷 |
boolean isPhoneNumber(String strPhone) | 判斷一個字元串是否是11位手機号格式(正規表達式) |
示例如下所示:
3、SharedPreferencesUtil
SharedPreferences操作工具類SharedPreferencesUtil,與原生保持功能一緻,目前支援功能如下:
1、save(put)與get:與原生保持一緻,支援儲存和擷取int、float、long、boolean、String、Set<String>
2、clear:清空SharedPreferences内容
3、remove:支援删除remove相應key對應的值
支援具體功能方法使用說明如下:
方法名 | 功能說明 |
---|---|
void saveInt(Context context, String key, int value) | 儲存int整型數值 |
void saveFloat(Context context, String key, float value) | 儲存Float浮點型數值 |
void saveBoolean(Context context, String key, boolean value) | 儲存Boolean數值 |
void saveLong(Context context, String key, long value) | 儲存Long數值 |
void saveString(Context context, String key, String value) | 儲存String數值 |
void saveStringSet(Context context, String key, Set<String> value) | 儲存Set<String>數值 |
int getInt(Context context, String key, int defaultValue) | 擷取相應key的整型數值 |
float getFloat(Context context, String key, float defaultValue) | 擷取相應key的Float浮點型數值 |
boolean getBoolean(Context context, String key, boolean defaultValue) | 擷取相應key的Boolean數值 |
long getLong(Context context, String key, long defaultValue) | 擷取相應key的Long數值 |
String getString(Context context, String key, String defaultValue) | 擷取相應key的String數值 |
Set<String> getStringSet(Context context, String key, Set<String> defaultValue) | 擷取相應key的Set<String>數值 |
void clear(Context context) | 清空sp檔案儲存的内容 |
void remove(Context context, String key) | 移除key對應的内容 |
4、ToastUtil
Toast操作工具類,提供非阻塞式顯示Toast,防止出現連續點選Toast時的顯示問題,目前支援功能如下:
1、Toast顯示
2、Toast取消
支援具體功能方法使用說明如下:
方法名 | 功能說明 |
---|---|
void showToast(final Context context, final CharSequence text, final int duration) | 顯示Toast |
void showToast(Context context, CharSequence text) | 顯示Toast,預設顯示時長duration為Toast.LENGTH_SHORT |
void cancelToast() | 取消Toast的顯示 |
示例如下所示:(從其它工具的示範已經可以看到ToastUtil示範顯示的效果~)
注:如果想要處理由于連續點選,導緻Toast重複顯示相同内容的問題或者退出目前頁面後,Toast還會顯示的問題,可以參考部落格文章的解決方案:完美解決Android中Toast重複顯示相同内容的問題
5、LogUtil
日志Log操作工具類,支援日記列印以及輸出到檔案中進行存儲,便于Log記錄與持久化存儲:
1、Log列印到控制台
2、Log輸出到檔案儲存進行持久化存儲
使用注意事項:
1) 在使用LogUtil前需要調用init方法進行初始化(建議在Application中進行初始化),LogUtil.init(Context context, boolean isShowLog, boolean isWriteToFile) , 提供了兩個初始化開關參數:
a、isShowLog,是否列印日志,預設關閉
b、isWriteToFile,日志是否寫到檔案,預設關閉
2) 由于Log需要記錄到檔案中進行持久儲存,需要在Manifest中聲明檔案寫權限android.permission.WRITE_EXTERNAL_STORAGE
支援具體功能方法使用說明如下:
方法名 | 功能說明 |
---|---|
void i(String tag, String msg) | 列印Info level log |
void d(String tag, String msg) | 列印Debug level log |
void v(String tag, String msg) | 列印Verbose level log |
void w(String tag, String msg) | 列印Warn level log |
void e(String tag, String msg) | 列印Error level log |
示例如下所示:
6、TimeUtil
時間Time操作工具類TimeUtil,目前支援功能如下:
1、擷取目前系統時間(格式為yyyy-MM-dd HH:mm:ss的字元串)
2、判斷兩個日期是否為同一天(yyyy-MM-dd HH:mm:ss格式的日期)
3、判斷兩個時間之間的相隔的秒數、分鐘數、小時數以及天數
支援具體功能方法使用說明如下:
方法名 | 功能說明 |
---|---|
String getSystemCurrentTime() | 擷取目前系統時間(格式為yyyy-MM-dd HH:mm:ss的字元串) |
boolean isSameDay(String lastTime, String currentTime) | 判斷兩個日期是否為同一天(yyyy-MM-dd HH:mm:ss格式的日期) |
long twoDateGapSeconds(String startTime, String endTime) | 計算兩個日期的時間相差多少秒 |
long twoDateGapMinutes(String startTime, String endTime) | 計算兩個日期的時間相差多少分鐘 |
long twoDateGapHours(String startTime, String endTime) | 計算兩個日期的時間相差多少小時 |
long twoDateGapDays(String startTime, String endTime) | 計算兩個日期的時間相差多少天 |
示例如下所示:
7、SoftInputUtil
軟鍵盤操作工具類SoftInputUtil,支援功能如下:
1、軟鍵盤顯示(支援綁定view監聽輸入)
2、軟鍵盤隐藏(收起)
支援具體功能方法使用說明如下:
方法名 | 功能說明 |
---|---|
void showSoftInput(Context context, View view) | 顯示系統軟鍵盤,其中View為接收輸入内容的View |
void hideSoftInput(Context context, View view) | 隐藏系統軟鍵盤,其中View為接收輸入内容的View |
void hideSoftInput(Activity activity) | 隐藏系統軟鍵盤 |
示例如下所示:
8、DimenUtil
Dimen尺寸操作工具類DimenUtil,支援功能如下:
1、支援sp與px、dp與px之間的互相換算
支援具體功能方法使用說明如下:
方法名 | 功能說明 |
---|---|
int dp2px(Context context, int dipValue) | 轉換dp為px |
int px2dp(Context context, int pxValue) | 轉換px為dp |
int sp2px(Context context, float spValue) | 轉換sp為px |
int px2sp(Context context, float pxValue) | 轉換px為sp |
示例如下所示:
9、AppUtil
App相關工具操作類,支援功能如下:
1、擷取自身以及第三方應用版本名稱以及版本号
2、檢測某應用是否已安裝
3、擷取某應用在手機的狀态(更新、已安裝、未安裝等)
4、啟動(打開)第三方APP
支援具體功能方法使用說明如下:
方法名 | 功能說明 |
---|---|
String getAppVersionName(Context context) | 擷取應用本身的版本名 |
String getAppVersionName(Context context, String packageName) | 擷取第三方應用的版本名 |
int getAppVersionCode(Context context) | 擷取應用本身的版本号 |
int getAppVersionCode(Context context, String packageName) | 擷取第三方應用的版本号 |
boolean checkPackageInstalled(Context context, String packageName) | 檢測該包名所對應的應用是否已安裝 |
int checkPackageStatus(Context context, String packageName, int versionCode) | 判斷APP在手機的安裝狀态(未安裝、已安裝、更新等) |
boolean openApp(Context context, String packageName) | 啟動第三方APP |
示例如下所示:
10、 NetworkUtil
網絡工具操作類NetworkUtil,目前支援功能如下:
1、擷取網絡IP位址
2、判斷網絡是否可用
3、判斷目前網絡是否連接配接WiFi
支援具體功能方法使用說明如下:
方法名 | 功能說明 |
---|---|
String getIp() | 擷取網絡IP位址 |
boolean isNetworkAvailable(Context context) | 判斷目前網絡是否可用 |
boolean isWifiConnected(Context context) | 判斷目前網絡是否連接配接WiFi |
示例如下所示:
11、DeviceUtil
裝置操作工具類DeviceUtil,目前支援功能如下:
1、擷取裝置螢幕寬度和高度大小
2、擷取裝置IMEI号
3、擷取SIM卡IMSI号
4、擷取裝置MAC位址
支援具體功能方法使用說明如下:
方法名 | 功能說明 |
---|---|
int getScreenWidth(Context context) | 擷取裝置螢幕寬度(px) |
int getScreenHeight(Context context) | 擷取螢幕的高度(px) |
String getImei(Context context) | 擷取裝置IMEI号 |
String getImsi(Context context) | 擷取SIM卡IMSI序列号 |
String getMacAddress(Context context) | 擷取裝置Mac位址 |
示例如下所示:
12、SystemUtil
System操作工具類SystemUtil,目前支援功能如下:
1、判斷SD卡是否可用
2、擷取SD卡路徑
3、擷取系統型号
4、擷取系統版本号
5、擷取系統SDK版本号資訊
6、支援調用系統浏覽器打開網頁
7、支援打開系統分享選擇器
支援具體功能方法使用說明如下:
方法名 | 功能說明 |
---|---|
boolean isSDCardAvailable() | 判斷SD卡是否可用 |
String getSDCardPath() | 擷取SDCard路徑 |
String getSystemModel() | 擷取系統型号 |
String getSystemVersion() | 擷取系統版本号 |
int getSDKVersion() | 擷取系統SDK版本号 |
void openSystemBrowser(Context context,String url) | 調用系統浏覽器打開網頁 |
void openSystemShareChooser(Context context, String title, String text) | 打開系統分享選擇器 |
示例如下所示:
13、RunnableUtil
Runnable操作工具類RunnableUtil,通過内置線程池,提高任務執行效率,支援如下功能:
1、支援Runnable任務task立即以及排隊執行
支援具體功能方法使用說明如下:
方法名 | 功能說明 |
---|---|
void runTask(Runnable task) | 執行Runnable任務,預設為任務排隊執行 |
runTask(Runnable task, boolean immediate) | 執行Runnable任務,immediate值表明任務是否立即執行,true:任務立即執行,false:任務排隊執行(預設值) |
示例如下所示:
14、ViewUtil
View操作相關工具類ViewUtil,目前支援功能如下:
1、判斷兩次點選之間是否存在快速點選(支援重置)
支援具體功能方法使用說明如下:
方法名 | 功能說明 |
---|---|
boolean isFastDoubleClick() | 判斷兩次點選之間是否存在快速點選,預設兩次點選時間間隔門檻值為800ms |
boolean isFastDoubleClick(long interval,boolean isReset) | 判斷兩次點選之間是否存在快速點選,預設兩次點選時間間隔門檻值為800ms,isReset辨別需要是要重置,預設為false(由于記錄上次點選時間是采用static的形式,防止在兩個不同控件之間快速點選存在誤判) |
示例如下所示:
三、下載下傳
項目所有代碼已上傳至GitHub,項目以及demo位址:https://github.com/oukanggui/AndroidPracticalUtils,有興趣的同學可以下載下傳閱讀或運作demo檢視效果