IBase
Config
INumberConfig
// 0 - 12 數字
public static final int ZERO = 0;
public static final int ONE = 1;
public static final int TWO = 2;
public static final int THREE = 3;
public static final int FOUR = 4;
public static final int FIVE = 5;
public static final int SIX = 6;
public static final int SEVEN = 7;
public static final int EIGHT = 8;
public static final int NINE = 9;
public static final int TEN = 10;
public static final int ELEVEN = 11;
public static final int TWELVE = 12;
// Activity 和 Fragment,防止多次點擊重複跳轉Activity
// 重複點擊的時間間隔
public static final int CLICK_INTERVAL = 500;
Application
IBaseApplication
1、繼承的是 MultiDexApplication,
如果您繼承 IBaseApplication 有問題,
請在 build.gradle 添加
implementation "com.android.support:multidex:1.0.3"
2、繼承 IBaseApplication 必須重寫 getLogUtils(),
如果您不用記錄異常日誌,可設置返回值爲 null,
如果您要記錄日誌,請新建 class 並繼承 ILogUtils
IAppCrashHandler
用來捕捉程序異常
// 在您的Application的onCreate方法裏調用
// getLogUtils() 返回值爲 ILogUtils
IAppCrashHandler.getInstance(getLogUtils()).init(getApplicationContext());
Activity
IBaseAppCompatActivity
繼承 IBaseAppCompatActivity 必須重寫 getContentLayoutId()。
// 在super.onCreate(savedInstanceState);後調用
initWidows(Bundle savedInstanceState)
// 在initWidows(savedInstanceState);後調用
// 返回爲false時,finish當前Activity
boolean initArgs(Intent intent)
// 在setContentView(getContentLayoutId());後調用
initBefore(Bundle savedInstanceState)
// 在initBefore(savedInstanceState);後調用
initWidget()
// 在initWidget();後調用
initData()
// 防止多次點擊重複跳轉Activity可使用下面方法跳轉
// 跳轉Activity,clz要跳轉的Activity,bundle傳至Activity的參數
startActivity(Class clz)
startActivity(Class clz, Bundle bundle)
startActivityForResult(Class clz, int requestCode)
startActivityForResult(Class clz, Bundle bundle, int requestCode)
IActivityContainer
如果您的 Activity 繼承的是 IBaseAppCompatActivity,
IBaseAppCompatActivity 已經在 onCreate 調用了 addActivity,
在 onDestroy 調用了 removeActivity,請不要重複調用。
// 添加Activity
IActivityContainer.getInstance().addActivity(Activity);
// 移除Activity
IActivityContainer.getInstance().removeActivity(Activity);
// 移除最後一個Activity
IActivityContainer.getInstance().removeLastActivity(Activity);
// finish所有Activity
IActivityContainer.getInstance().finishAllActivity();
Fragment
IBaseFragmentApp
IBaseFragmentApp 繼承的是 android.app.Fragment,
繼承 IBaseFragmentApp 必須重寫 getContentLayoutId()。
// 在onAttach(context)裏調用
initArgs(Bundle bundle)
// 在onCreateView(inflater, container, savedInstanceState)裏
// 初始化 View root 後調用
initBefore(Bundle savedInstanceState)
// 在onCreateView(inflater, container, savedInstanceState)裏
// 在initBefore(savedInstanceState);後調用
initWidget(View root)
// 在onViewCreated(view, savedInstanceState)裏調用
// 如果您用了kotlin,要對控件進行操作,請在此方法裏操作
initKotlinWidget()
// 在onViewCreated(view, savedInstanceState)裏
// 在initKotlinWidget();後調用,只會觸發一次
onFirstInit()
// 在onViewCreated(view, savedInstanceState)裏
// 在onFirstInit();後調用,可能會觸發多次
initData();
// 返回按鍵觸發時調用
// 返回True代表我已處理返回邏輯,Activity不用自己finish
// 返回False代表我沒有處理邏輯,Activity自己走自己的邏輯
boolean onBackPressed()
// 防止多次點擊重複跳轉Activity可使用下面方法跳轉
// 跳轉Activity,clz要跳轉的Activity,bundle傳至Activity的參數
startActivity(Class clz)
startActivity(Class clz, Bundle bundle)
startActivityForResult(Class clz, int requestCode)
startActivityForResult(Class clz, Bundle bundle, int requestCode)
IBaseFragmentV4
IBaseFragmentV4 同 IBaseFragmentApp 一樣,
只不過繼承的是 android.support.v4.app.Fragment,
繼承 IBaseFragmentV4 必須重寫 getContentLayoutId()。
Listener
IOnTextChangedListener
TextView 文字改變監聽
textView.addTextChangedListener(new IOnTextChangedListener(){
// 根據需要重寫方法
})
Widget
IAlertDialog
// alertType: 不填默認爲 IAlertDialog.CANCEL_TYPE
// IAlertDialog.CANCEL_TYPE 對話框有取消和確定按鈕
// IAlertDialog.CONFIRM_TYPE 對話框只有確定按鈕
new IAlertDialog(Context context, int alertType)
// 點擊返回鍵是否取消對話框,默認true:取消對話框
.setOnBackClickCancelable(boolean)
// 設置標題,可以是字符串,也可以是資源Id
.setTitleText(String or @StringRes int)
// 設置標題文字顏色
.setTitleTextColor(int)
// 設置內容
.setContentText(String or @StringRes int)
// 設置內容文字顏色
.setContentTextColor(int)
// 設置取消按鈕文字
.setCancelText(String or @StringRes int)
// 設置取消按鈕文字顏色
.setCancelTextColor(int)
// 設置確定按鈕文字
.setConfirmText(String or @StringRes int)
// 設置確定按鈕文字顏色
.setConfirmTextColor(int)
// 設置取消按鈕點擊事件
.setCancelClickListener(IAlertDialog.OnDialogClickListener)
// 設置確定按鈕點擊事件
.setConfirmClickListener(IAlertDialog.OnDialogClickListener)
// 必須調用show()纔會顯示
.show();
Utils
IDisplayUtils
// 獲取屏幕寬度
IDisplayUtils.getScreenWidth(Context);
// 獲取屏幕高度
IDisplayUtils.getScreenHeight(Context);
// 獲取狀態欄的高度
IDisplayUtils.getStatusBarHeight(Context);
// px sp轉換
IDisplayUtils.px2sp(Context, float);
// sp px轉換
IDisplayUtils.sp2px(Context, float);
// px dp轉換
IDisplayUtils.px2dp(Context, float);
// dp px轉換
IDisplayUtils.dp2px(Context, float);
IKeyboardUtils
// 顯示鍵盤
IKeyboardUtils.showKeyboard(View);
// 隱藏鍵盤
IKeyboardUtils.hideKeyboard(View);
// 如果顯示則隱藏,如果隱藏則顯示
IKeyboardUtils.toggleSoftInput(View);
// 如果沒有彈出或隱藏鍵盤,可嘗試如下方式
view.postDelayed(new Runnable() {
@Override
public void run() {
// 顯示鍵盤 or 隱藏鍵盤
}
}, 100);
ILogUtils
繼承 ILogUtils,必須重寫以下方法:
String getTag():打印時用到的Tag;
String getLogSavePath():日誌保存目錄,絕對目錄;
boolean getLogSwitch():日誌開關;
boolean getLogEncrypt():是否加密日誌;
String encode(String):加密日誌;
String decode(String):解密日誌。
// 讀取日誌
String redLog(String filePath);
// 寫入日誌
writeLog(String msg);
writeLog(Throwable throwable);
writeLog(String msg, Throwable throwable);
例:
public class LogUtils extends ILogUtils {
private static LogUtils instance = null;
private LogUtils() { }
public static LogUtils getInstance() {
if (instance == null){
synchronized (LogUtils.class){
if (instance == null){
instance = new LogUtils();
}
}
}
return instance;
}
@Override
public String getTag() {
return "LOG";
}
@Override
public String getLogSavePath() {
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Log/";
File file = new File(path);
if (!file.exists()) {
if (!file.mkdirs()) {
Log.e(getTag(), "getLogSavePath: 創建文件夾失敗");
}
}
return path;
}
@Override
protected boolean getLogSwitch() {
// true 記錄日誌,false 不記錄日誌
return true;
}
@Override
protected boolean getLogEncrypt() {
// true 加密日誌,false 不加密日誌
return false;
}
@Override
protected String decode(String string) {
// 根據自己加密方式進行解密
// 返回解密後的日誌
return string;
}
@Override
protected String encode(String string) {
// 根據自己需要的加密方式進行加密
// 返回解密後的日誌
return string;
}
}
IMD5Utils
// MD5加密,返回加密後的字符串
String encodeString = IMD5Utils.getMD5Code(String);
IPermissionUtils
// 檢查App是否已授予某些權限
// 返回未授予權限的數組
String[] permissions = IPermissionUtils.checkPermissions(Context, String...);
// 檢查App是否已授予指定權限
// 返回true:授予,false:未授予
checkPermissions(Context, String);
ISharedPreferencesUtils
繼承 ISharedPreferencesUtils,必須重寫以下方法:
String getFileName()
Context getContext()
// 添加數據
// key String
// value String/int/boolean/float/long/Set<String>
putValue(key, value);
// 查詢數據
// key String
// defaultValue String/int/boolean/float/long/Set<String>
// defaultValue 默認數據,返回值同默認數據類型
getValue(key, defaultValue);
// 移除key值對應的值
remove(key);
// 清除所有數據
clear();
// 查詢key是否已經存在
boolean contains(key);
// 返回所有的鍵值對
Map<String, ?> getAll();
IStatusBarUtil
// 設置狀態欄顏色
IStatusBarUtil.setStatusBarColor(Activity, int);
// 狀態欄文字爲黑色
IStatusBarUtil.setLightMode(Activity);
// 狀態欄文字爲白色
IStatusBarUtil.setDarkMode(Activity);
IToastUtils
// 顯示在底部的Toast
// showTime不填,默認2000
IToastUtils.showToastBottom(Context, String or @StringRes int, int showTime);
// 顯示在中間的Toast
// showTime不填,默認2000
IToastUtils.showToastCenter(Context, String or @StringRes int, int showTime);
// 自定義顯示位置
// gravity-eg:Gravity.BOTTOM
// showTime不填,默認2000
IToastUtils.showToast(Context, int gravity, String or @StringRes int, int showTime);
// 顯示在中間大Toast
// flagRes 圖標資源
// showTime不填,默認2000
IToastUtils.showBigToastCenter(Context, String or @StringRes int, int flagRes, int showTime);
IValidateUtils
// 判斷手機號碼是否正確
IValidateUtils.checkMobile(String);
// 判斷郵箱是否正確
IValidateUtils.checkEmail(String);
// 判斷http/https地址是否正確
IValidateUtils.checkHttpUrl(String);
// 檢查字符在某個區間
// min 最小長度(包含)
// max 最大長度(包含)
IValidateUtils.checkLengthInterval(String, int min, int max);
Adapter
IBaseAdapter
IBaseAdapter 繼承的是 BaseAdapter
例:
public class TestAdapter extends IBaseAdapter<String> {
public TestAdapter(Context context) {
super(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 實現自己的ItemView
if(convertView == null){
convertView = 加載自己的 ItemView
}
return convertView;
}
}
TestAdapter mAdapter = new TestAdapter(this);
listView.setAdapter(mAdapter);
// 添加數據到最前面
mAdapter.addFirst(String);
// 添加數據到最後面
mAdapter.add(String);
// 添加一個集合的數據
mAdapter.addAll(Collection<String>);
// 設置指定下標position的數據
mAdapter.set(int position, String);
// 異常指定下標position數據
mAdapter.removeAtIndex(int position);
// 清空數據
mAdapter.clear()
// 注意以上數據操作均沒有調用 notifyDataSetChanged()
// 請按自己需要調用
mAdapter.notifyDataSetChanged();
IBaseRecyclerAdapter
IBaseRecyclerAdapter 繼承的是 RecyclerView.Adapter
例:
public class TestAdapter extends IBaseRecyclerAdapter<String> {
public TestAdapter(Context context) {
super(context);
}
@Override
public int getContentItemViewType(int position) {
return R.layout.自己的ItemView Layout;
}
@Override
public IBaseViewHolder<String> createContentViewHolder(View root) {
return new Holder(root);
}
private class Holder extends IBaseViewHolder<String> {
private TextView view;
Holder(View itemView) {
super(itemView);
view= $(R.id.自己命名的View id);
}
@Override
public void onBind(String poetry, int position) {
view.setText(poetry);
}
}
}
TestAdapter mAdapter = new TestAdapter(this);
recyclerView.setAdapter(mAdapter);
// 添加頭部,自己新建Class繼承IBaseRecyclerAdapter.ItemView
mAdapter.addHeader(ItemView)
// 添加底部,自己新建Class繼承IBaseRecyclerAdapter.ItemView
mAdapter.addFooter(ItemView)
// 根據下標index獲取頭部
ItemView header = mAdapter.getHeader(int index);
// 根據下標index獲取底部
ItemView footer = mAdapter.getFooter(int index);
// 移除所有頭部
mAdapter.removeAllHeader();
// 移除所有底部
mAdapter.removeAllFooter();
// 獲取頭部集合大小
mAdapter.getHeaderCount();
// 獲取底部集合大小
mAdapter.getFooterCount();
// 獲取頭部集合
LinkedList<ItemView> headers = mAdapter.getHeaders();
// 獲取底部集合
LinkedList<ItemView> footers = mAdapter.getFooters();
// 移除指定頭部數據,或指定下標index的頭部數據
mAdapter.removeHeader(ItemView or int index);
// 移除指定底部數據,或指定下標indext的底部數據
mAdapter.removeFooter(ItemView or int index);
// 獲取數據集合
LinkedList<String> datas = mAdapter.getDataList();
// 獲取數據集合大小
mAdapter.getCount();
// 根據下標index獲取數據
mAdapter.getItem(int index);
// 添加數據到最前面
mAdapter.addFirst(String);
// 添加數據到最後面
mAdapter.add(String);
// 添加一個集合的數據
mAdapter.add(Collection<String>);
// 移除指定數據,或指定下標position的數據
mAdapter.remove(String or int position)
// 清空數據
mAdapter.clear();
// 是否需要加載更多
// loadMoreIsLast 不填默認爲true,加載更多顯示在底部下面
// loadMoreIsLast 設置爲false,加載更多顯示在底部上面數據下面
// loadMoreHolder 不填爲默認加載佈局
// loadMoreHolder可自定義,自己新建Class繼承IBaseLoadMoreHolder
// listener 加載更多處理事件
mAdapter.needLoadMore(boolean loadMoreIsLast,
RecyclerView recyclerView,
BaseLoadMoreHolder loadMoreHolder,
OnLoadMoreListener listener);
// 停止加載更多(沒有更多了)
mAdapter.loadMoreStop();
// 加載更多失敗
mAdapter.loadMoreError();
// 設置是否需要刷新數據,默認爲true
// 在操作數據增刪改時刷新數據顯示
mAdapter.setNotifyOnChange(boolean);
// 數據Item點擊事件
mAdapter.setOnItemClickListener(OnItemClickListener);
// 數據Item長按事件
mAdapter.setOnItemLongClickListener(OnItemLongClickListener);
//
mAdapter.obtainGridSpanSizeLookUp(int maxCount)