我正在使用的應用程序是一種在Android中的後臺運行的服務。 問題是我需要爲服務的某些功能確定通知欄的高度。Android - 來自服務的通知欄高度
我發現了一些解決方案,對於常規活動 - 活動內部的視圖可以在沒有通知欄的情況下確定自己的高度,基於從onSizeChanged事件檢查其實際視圖大小。 但是,這不適用於沒有繪製物理視圖的服務。
我真的很感激在系統級別獲取通知欄的大小的任何想法,也許?
非常感謝!
Vitaliy
我正在使用的應用程序是一種在Android中的後臺運行的服務。 問題是我需要爲服務的某些功能確定通知欄的高度。Android - 來自服務的通知欄高度
我發現了一些解決方案,對於常規活動 - 活動內部的視圖可以在沒有通知欄的情況下確定自己的高度,基於從onSizeChanged事件檢查其實際視圖大小。 但是,這不適用於沒有繪製物理視圖的服務。
我真的很感激在系統級別獲取通知欄的大小的任何想法,也許?
非常感謝!
Vitaliy
有一個活動告訴你的服務適當的大小使用。狀態欄高度以及屏幕大小在您的服務運行過程中可能會發生變化。
也許您可以檢索標準通知欄圖標並進行測量。
你必須讓你有更多的機會存在於所有Android定製使用的系統圖標(Sense界面,MotoBlur的,等...)
喜歡的東西:
Drawable phoneCallIcon = getResources().getDrawable(android.R.drawable.stat_sys_phone_call);
int height = phoneCallIcon.getIntrinsicHeight();
從我的Nexus One中運行此功能可以提供38像素的高度,這是準確的。
對這個'黑客'更安全的方法是通過一些標準的通知圖標迭代。
這將是這樣:
int notificationBarResources[] = {
android.R.drawable.stat_sys_phone_call,
android.R.drawable.stat_notify_call_mute,
android.R.drawable.stat_notify_sdcard,
android.R.drawable.stat_notify_sync,
android.R.drawable.stat_notify_missed_call,
android.R.drawable.stat_sys_headset,
android.R.drawable.stat_sys_warning };
int notificationBarHeight = -1;
for (int i = 0; i < notificationBarResources.length; i++) {
try {
Drawable phoneCallIcon = getResources().getDrawable(
android.R.drawable.stat_sys_phone_call);
if ((notificationBarHeight = phoneCallIcon.getIntrinsicHeight()) != -1) {
break;
}
} catch (Resources.NotFoundException e) {
// Nothing to do
}
}
我有同樣的問題。我的視圖在視圖構造函數中繪製圖像。你知道實際的觀點高度唯一的一次是在onMesure方法做:
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
widthView = MeasureSpec.getSize(widthMeasureSpec);
heightView = MeasureSpec.getSize(heightMeasureSpec);
}
但是我不能鋪陳的圖像,此方法內(圖像的動畫將保持調用此方法)。
要知道我需要做的視圖的實際高度:
screenHeight - statusBarHeight
這樣我就可以在視圖的構造函數中使用這個值。
我不敢相信它必須如此複雜,才能爲這樣一個簡單的要求提供解決方案。
感謝您的回覆, 但我沒有具體的活動,我可以用它來做, ,這似乎是錯誤的創建一個特別爲此。 我相信應該有一些系統級的API來確定通知欄的高度? 爲了使事情更清楚 - 我不關心用戶「打開」通知欄,我只想知道它的默認大小 - 即當通知欄被摺疊時。 – Vitaliy 2010-06-15 12:35:25
@Vitaly:應用程序不有活動往往不受歡迎。另外,請不要認爲所有Android設備都具有相同的屏幕配置。例如,有些可能沒有狀態欄。 – CommonsWare 2010-06-15 13:02:02
謝謝,CommonsWave。只要我能夠得到通知欄的實際大小,應用程序就可以使用這種配置。 – Vitaliy 2010-06-15 16:39:01