2010-06-15 61 views
3

我正在使用的應用程序是一種在Android中的後臺運行的服務。 問題是我需要爲服務的某些功能確定通知欄的高度。Android - 來自服務的通知欄高度

我發現了一些解決方案,對於常規活動 - 活動內部的視圖可以在沒有通知欄的情況下確定自己的高度,基於從onSizeChanged事件檢查其實際視圖大小。 但是,這不適用於沒有繪製物理視圖的服務。

我真的很感激在系統級別獲取通知欄的大小的任何想法,也許?

非常感謝!

Vitaliy

回答

1

有一個活動告訴你的服務適當的大小使用。狀態欄高度以及屏幕大小在您的服務運行過程中可能會發生變化。

+0

感謝您的回覆, 但我沒有具體的活動,我可以用它來做, ,這似乎是錯誤的創建一個特別爲此。 我相信應該有一些系統級的API來確定通知欄的高度? 爲了使事情更清楚 - 我不關心用戶「打開」通知欄,我只想知道它的默認大小 - 即當通知欄被摺疊時。 – Vitaliy 2010-06-15 12:35:25

+0

@Vitaly:應用程序不有活動往往不受歡迎。另外,請不要認爲所有Android設備都具有相同的屏幕配置。例如,有些可能沒有狀態欄。 – CommonsWare 2010-06-15 13:02:02

+0

謝謝,CommonsWave。只要我能夠得到通知欄的實際大小,應用程序就可以使用這種配置。 – Vitaliy 2010-06-15 16:39:01

1

也許您可以檢索標準通知欄圖標並進行測量。

你必須讓你有更多的機會存在於所有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 
     } 
    } 
+0

謝謝,xamar! 這是一個非常有趣的解決方法! 這個特定的圖標是否保證在任何版本中都可用? 我還在想,是否沒有通用的方式來獲取有關通知欄的信息?這似乎是一個基本的東西.. 非常感謝您的幫助! Vitaliy – Vitaliy 2010-06-15 16:37:00

+0

我看到他們的資源id被導出(=可公開訪問),所以這不太可能改變。 無論如何,我會創建一個具有5-8通知欄圖標的數組,並且只要'Resources.NotFoundException'反覆遍歷它們即可。這樣你就可以最大限度地減少失敗的機率。 – xamar 2010-06-16 10:02:40

0

我有同樣的問題。我的視圖在視圖構造函數中繪製圖像。你知道實際的觀點高度唯一的一次是在onMesure方法做:

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    widthView = MeasureSpec.getSize(widthMeasureSpec); 
    heightView = MeasureSpec.getSize(heightMeasureSpec); 
    } 

但是我不能鋪陳的圖像,此方法內(圖像的動畫將保持調用此方法)。

要知道我需要做的視圖的實際高度:

screenHeight - statusBarHeight

這樣我就可以在視圖的構造函數中使用這個值。

我不敢相信它必須如此複雜,才能爲這樣一個簡單的要求提供解決方案。