如果你要封裝工具類艇搀,注意使用static關(guān)鍵字
有錯(cuò)誤或者需要補(bǔ)充的歡迎及時(shí)指正~~
顯示一段土司
private Toast toast;
public void showToast(Context context, String text) {
if (toast == null) {
toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
} else {
toast.setText(text);
}
toast.show();
}
調(diào)用:showToast(上下文, 土司內(nèi)容)
說明:Toast是可以用Application的Context當(dāng)上下文的尺迂,如果你有寫Application類遂跟,可以直接把它的單例弄過來填硕,這樣就又少傳一個(gè)參數(shù)了。友情提示Application的單例應(yīng)該這樣寫
public class MyApp extends Application {
private static MyApp myApp;
public static MyApp getInstance() {
return myApp;
}
@Override
public void onCreate() {
super.onCreate();
myApp = this;
}
}
顯示一段Snackbar
public void showSnackBar(final Activity activity, String text, String action, View.OnClickListener listener, Snackbar.Callback callback){
View rootView = ((ViewGroup) (activity.findViewById(android.R.id.content))).getChildAt(0);
final Snackbar snackbar = Snackbar.make(rootView, text, Snackbar.LENGTH_LONG);
snackbar.setAction(action, listener);
snackbar.setCallback(callback);
snackbar.show();
}
調(diào)用:showSnackBar(當(dāng)前Activity, 提示文字, 按鈕文字, 點(diǎn)擊回調(diào), Snackbar回調(diào))
說明:Snackbar和Toast 就不一樣了帚戳,顯示環(huán)境必須有一個(gè) View妹卿,這里選擇把當(dāng)前Activity的rootView傳給它,可避免它與導(dǎo)航欄的不河蟹問題渣玲。此封裝參數(shù)較多(還沒涉及顏色呢)逗概,建議根據(jù)實(shí)際應(yīng)用場(chǎng)景再重載幾個(gè)。比如你沒打算讓Snackbar消失時(shí)再做什么事忘衍,最后那個(gè)Callback就可以傳null(當(dāng)然要自己把相關(guān)判斷做了)
獲取屏幕寬度逾苫、高度
public int getScreenWidth(Context context) {
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Point point = new Point();
wm.getDefaultDisplay().getRealSize(point);
//point.x是寬度,point.y是高度枚钓,當(dāng)然铅搓,方法名應(yīng)該做相應(yīng)改變
return point.x;
}
調(diào)用:getScreenWidth(上下文)
說明:上下文可以傳Application的Context。getWidth()和getHeight()兩個(gè)方法已過時(shí)搀捷,不推薦再用
雙擊返回鍵星掰,退出應(yīng)用
private boolean mFlag = false;
private long mTimeout = -1;
private long time = 3000l;//判定時(shí)間(單位毫秒),這里設(shè)為3秒
private boolean checkBackAction() {
boolean flag = mFlag;
mFlag = true;
boolean timeout = (mTimeout == -1 || (System.currentTimeMillis() - mTimeout) > time);
if (mFlag && (mFlag != flag || timeout)) {
mTimeout = System.currentTimeMillis();
//這里寫給用戶的提示嫩舟,比如“再點(diǎn)擊一次退出應(yīng)用”
return true;
}
return !mFlag;
}
調(diào)用:重寫Activity的onKeyDown()方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (checkBackAction()) {
//這里寫與退出應(yīng)用有關(guān)的邏輯
return true;
}
return super.onKeyDown(keyCode, event);
}
說明:給用戶的提示建議用Toast或者Snackbar氢烘。
點(diǎn)擊空白處,隱藏軟鍵盤
//過程稍微復(fù)雜一些家厌,分成三段寫播玖,這個(gè)是主方法
private void hideSoftInput(Context context, MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (isShouldHide(v, ev)) {
doHide(context, v.getWindowToken());
}
}
}
public boolean isShouldHide(View v, MotionEvent event) {
//這里是用常用的EditText作判斷參照的,可根據(jù)情況替換成其它View
if (v != null && (v instanceof EditText)) {
int[] l = {0, 0};
v.getLocationInWindow(l);
int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left + v.getWidth();
boolean b = event.getX() > left && event.getX() < right && event.getY() > top && event.getY() < bottom;
return !b;
}
return false;
}
public void doHide(Context context, IBinder token) {
if (token != null) {
InputMethodManager im = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
}
}
調(diào)用:重寫Activity的dispatchTouchEvent()方法
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
hideSoftInput(this, ev);
return super.dispatchTouchEvent(ev);
}
說明:調(diào)用時(shí)傳的是this饭于,實(shí)際上也可以傳Application的Context黎棠。另外單就隱藏軟鍵盤而言,方法有很多镰绎,這里給出的并非最優(yōu)解,有興趣可繼續(xù)搜索木西。
狀態(tài)欄透明化
//Android5.0(API 21)也就是Lollipop以上的版本才能實(shí)現(xiàn)
if (Build.VERSION.SDK_INT >= 21) {
View decorView = getWindow().getDecorView();
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
沒有外傳參數(shù)畴栖,一般不用封裝,直接寫到你的Activity的onCreate()或者Fragment(這時(shí)需要先getActivity()再getWindow())的onCreateView()方法里面就行八千,頁面較多時(shí)建議弄一個(gè)base父類吗讶。
說明:如果有ToolBar或者ActionBar,狀態(tài)欄會(huì)和它們一體化恋捆,這時(shí)你也可以選擇把bar隱藏或設(shè)成透明照皆。另外如果寫成下面這樣
if (Build.VERSION.SDK_INT >= 21) {
View decorView = getWindow().getDecorView();
int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
getWindow().setNavigationBarColor(Color.TRANSPARENT);
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
結(jié)果就是導(dǎo)航欄也跟著變透明了。游戲一類的應(yīng)用可以這么寫沸停,看圖的話見仁見智膜毁,我本人更喜歡保留導(dǎo)航欄