版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1340334
在 Android 开发中,我们经常需要用到各种工具类,比如 SPUills,ListUtils,TimeUtils,StringUtils,ToastUtisl ,FragmentUtils 等等。今天,这篇博客主要介绍我平时在开发中常用到的工具类,希望能给大家带来一点点帮助,后续会不断更新,欢迎大家加入一起维护。
写在基类 BaseActivity,然后每个Activity都去继承
public class BaseActivity extends AppCompatActivity {
public ActivityManagerUtil activityManagerUtil;
public Activity mActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutId() );
mActivity = this;
activityManagerUtil = ActivityManagerUtil.getInstance();
activityManagerUtil.pushOneActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//结束Activity&从栈中移除该Activity
activityManagerUtil.popOneActivity(this);
}
protected abstract int getLayoutId();
}
需要完全退出
activityManagerUtil.appExit();
只要在Application 初始化即可
public class AndroidUtilsApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//崩溃处理
CrashHandlerUtil crashHandlerUtil = CrashHandlerUtil.getInstance();
crashHandlerUtil.init(this);
crashHandlerUtil.setCrashTip("很抱歉,程序出现异常,即将退出!");
}
}
让 Fragment 处理 Back 事件,“高内聚,低耦合”,一直是我们追求的目标,而这完美地体现了这一点
在 Application 初始化的时候调用
获取 Application 对象
该工具类的主要作用是为我们提供一个 Application 对象,而 Application 是 Context 的实现类。这样,我们在写很多工具类的时候,就不需要传入 Context 对象了。比如 ToastUtils,SPUtils 等,方便用快捷
在该工具里面,它依赖于 Utils getApp() 方法,因此,我们在调用相应方法的时候不需要每次都传入 Context 。方便又快捷
showLongSafe 方法与 showLong 方法的区别在于 showLongSafe 是安全地,它可以直接在子线程中调用
用来产生打开各种类型文件的 Intent,包括 图片,音频文件,视频文件,APK,ppt,xls,doc,chm,txt 等文件
主要用来处理 dp 与 px 的互转,sp 与 px 的互转等。
获取app版本名
获取app版本号
NetStateUtils
判断是否是 3G 网络
判断是否是 wifi 网络
判断是否是 2G 网络
判断 WiFi 是否打开
判断是否有网络连接
判断当前是否是移动网络,并且网络是否可用
获取当前的网络状态:(该方法是自定义的) :没有网络-0:WIFI网络1:4G网络-4:3G网络-3:2G网络-2
获取本地的 IP 地址
判断 GPS 是否开启
更多方法,请参考该类,这里不一一说明了。
监听网络变化的,主要有三个广播
<action android:name="android.NET.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.Net.wifi.WIFI_STATE_CHANGED" />
<action android:name="android.net.wifi.STATE_CHANGE" />
需要注意的 android.NET.conn.CONNECTIVITY_CHANGE 这个广播,从 Android 7.0 开始,如果是静态注册的,将无法收到广播。
更多行为变更请查看官网地址
获取实例对象
显示输入法
隐藏输入法
判断是否是空字符串
获取字符串的值,如果是 null,返回 defStr。当然你也可以调用 getStr(String str) 方法,为 null 的话,返回 “”。
好处:如果字符串为空,则会包空指针异常。调用该方法,我们可以不必每次判断字符串是否为空。
获取字符串的长度。平时我们如果调用 String.length ,如果字符串为空,则会包空指针异常。调用该方法,我们可以不必每次判断字符串是否为空。
该方法是将字符串的首字母变为大小写
/**
* capitalize first letter
*
* <pre>
* capitalizeFirstLetter(null) = null;
* capitalizeFirstLetter("") = "";
* capitalizeFirstLetter("2ab") = "2ab"
* capitalizeFirstLetter("a") = "A"
* capitalizeFirstLetter("ab") = "Ab"
* capitalizeFirstLetter("Abc") = "Abc"
* </pre>
*
* @param str
* @return
*/
在 Android 开发中,对 List 的操作也是非常常见的。
获取 List 的数量。该方法相比传统的方法,不需要每一次都去判空。
if(sourceList==null){
return 0;
}else{
sourceList.size();
}
// 或者 相当于以下代码
sourceList == null ? 0 : sourceList.size()
判断 List 是否为空
判断两个链表是否相等
if entry already exist in sourceList, return false, else add it and return true.
add all distinct entry to list1 from list2
remove duplicate entries in list
ArrayUtils 里面的方法与 ListUtils 基本是一一对应的,这里就不再一一阐述了
验证身份证号码
验证手机号码(支持国际格式,+86135xxxx…(中国内地),+00852137xxxx…(中国香港))
检验是否是电子邮箱。格式是数字,字母,下划线,但不含有 -。
验证是否是整数
验证整数和浮点数
检验是否是空白字符
检验是否是中文
验证日期(日期,格式:1992-09-03,或1992.09.03)
格式:http://blog.csdn.net/gdutxiaoxu/article/details/71732642或 http://www.csdn.net:80
匹配 IP 地址
手机号码,中间4位星号替换
银行卡号,保留最后4位,其他星号替换
关于更多正则表达式的,可以参考我的这一篇博客。 Android 常用正则表达式
获取当前的日期 ,格式为 yyyy-MM-dd
- String getWeekOfDate(long timeMiss)
根据毫秒数获取当前是星期几
获取当前时间和日期,yyyy-MM-dd HH:mm:ss。
-
到目前为止,工具类的收集大概这么多,有一些本地还没同步的,后续会不断更新。