Andorid获取状态栏高度
在應(yīng)用開發(fā)中,有時(shí)我們需要用代碼計(jì)算布局的高度,可能需要減去狀態(tài)欄(status bar)的高度。狀態(tài)欄高度定義在Android系統(tǒng)尺寸資源中status_bar_height,但這并不是公開可直接使用的,例如像通常使用系統(tǒng)資源那樣android.R.dimen.status_bar_height。但是系統(tǒng)給我們提供了一個(gè)Resource類,通過這個(gè)類我們可以獲取資源文件。下邊是在Activity中獲取的方法
?
?| 1 2 3 4 5 6 7 8 | public int getStatusBarHeight() { ??int result = 0; ??int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); ??if (resourceId > 0) { ??????result = getResources().getDimensionPixelSize(resourceId); ??} ??return result; } |
?
?
?
這里還有另外一種方法,大家都知道Android的所有資源都會(huì)有惟一標(biāo)識(shí)在R類中作為引用。我們也可以通過反射獲取R類的實(shí)例域,代碼如下
?
?
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /** ?* 獲得狀態(tài)欄的高度 ?* ?* @param context ?* @return ?*/ public static int getStatusHeight(Context context) { ????int statusHeight = -1; ????try { ????????Class<!--?--> clazz = Class.forName("com.android.internal.R$dimen"); ????????Object object = clazz.newInstance(); ????????int height = Integer.parseInt(clazz.getField("status_bar_height") ????????????????.get(object).toString()); ????????statusHeight = context.getResources().getDimensionPixelSize(height); ????} catch (Exception e) { ????????e.printStackTrace(); ????} ????return statusHeight; } |
?
我們可以看到得到的結(jié)果是一樣的。當(dāng)然,獲取狀態(tài)欄的高度方法是不是就只有以上兩種呢,當(dāng)然不是,下邊再介紹一種獲取狀態(tài)欄高度的方法,不過不推薦使用,因?yàn)檫@個(gè)方法依賴于WMS(窗口管理服務(wù)的回調(diào))。
?
?| 1 2 3 4 | Rect rectangle= new Rect(); Window window= getWindow(); window.getDecorView().getWindowVisibleDisplayFrame(rectangle); int statusBarHeight= rectangle.top; |
?
?
結(jié)伴旅游,一個(gè)免費(fèi)的交友網(wǎng)站:www.jieberu.com
推推族,免費(fèi)得門票,游景區(qū):www.tuituizu.com
轉(zhuǎn)載于:https://www.cnblogs.com/rabbit-bunny/p/4265291.html
總結(jié)
以上是生活随笔為你收集整理的Andorid获取状态栏高度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【dp 贪心】bzoj4391: [U
- 下一篇: 浅谈Java中的hashcode方法