Android開發(fā)常用的Util方法(屏幕UI篇)

如果你要封裝工具類艇搀,注意使用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))
說明:SnackbarToast 就不一樣了帚戳,顯示環(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)用:重寫ActivityonKeyDown()方法

@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)用:重寫ActivitydispatchTouchEvent()方法

@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ù)畴栖,一般不用封裝,直接寫到你的ActivityonCreate()或者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)航欄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瘟滨,更是在濱河造成了極大的恐慌候醒,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杂瘸,死亡現(xiàn)場(chǎng)離奇詭異倒淫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)败玉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門敌土,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人运翼,你說我怎么就攤上這事返干。” “怎么了南蹂?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵犬金,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我六剥,道長(zhǎng)晚顷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任疗疟,我火速辦了婚禮该默,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘策彤。我一直安慰自己栓袖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布店诗。 她就那樣靜靜地躺著裹刮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庞瘸。 梳的紋絲不亂的頭發(fā)上捧弃,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音擦囊,去河邊找鬼违霞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瞬场,可吹牛的內(nèi)容都是我干的买鸽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贯被,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼眼五!你這毒婦竟也來了妆艘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤弹砚,失蹤者是張志新(化名)和其女友劉穎双仍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桌吃,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡朱沃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茅诱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逗物。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瑟俭,靈堂內(nèi)的尸體忽然破棺而出翎卓,到底是詐尸還是另有隱情,我是刑警寧澤摆寄,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布失暴,位于F島的核電站,受9級(jí)特大地震影響微饥,放射性物質(zhì)發(fā)生泄漏逗扒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一欠橘、第九天 我趴在偏房一處隱蔽的房頂上張望矩肩。 院中可真熱鬧,春花似錦肃续、人聲如沸黍檩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刽酱。三九已至,卻和暖如春瞧捌,著一層夾襖步出監(jiān)牢的瞬間肛跌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工察郁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人转唉。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓皮钠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親赠法。 傳聞我的和親對(duì)象是個(gè)殘疾皇子麦轰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容