2011-04-21 23 views
3

如何檢查Android中的狀態欄顏色?如何檢查Android中的狀態欄顏色?

爲什麼我需要檢查這個?我根據the design guidelines創建了我的狀態欄圖標,但是在某些設備(Samsung Galaxy S)上,狀態欄是黑色的,它運行的是Android 2.1。

在Android 2.3(Nexus S)和模擬器(較早的Android 2.1)中,狀態欄圖標的建議看起來很棒,使用默認的淺灰色狀態欄。然而,推薦用於2.3之前的黑色圖標在三星Galaxy S上看起來不太明顯。

如果Android運行2.1或2.2版本的黑色狀態欄,我想提供一個白色圖標。

基本上問題在於,Android設計指南並未真正覆蓋像三星Galaxy S那樣改變用戶界面的手機。例如,運行Android 2.1的三星Galaxy S應該有一個淺灰色狀態欄,但它有一個黑的那個。這不符合Google提供的設計指南。

回答

1

通常你想通過清單文件結合這一點,但有一種方法來獲取值: 使用Build.VERSION.SDK_INT並檢查它反對Build.VERSION_CODES, http://developer.android.com/reference/android/os/Build.VERSION.html

可以得到一個Android開發博客更有趣的閱讀張貼here

- 編輯 -

你必須弄清楚你是什麼樣的設備上從BUILD但不要忘了人有主題,以及.. 。

撕毀框架和狀態欄的應用程序的短,這將是最好的... here is a link如果你想嘗試挖掘到狀態欄,並從原料Framework.jar得到它...

這是一個guy who mentions的鏈接,他是如何處理狀態欄的。

+0

是的,它允許我檢查Android操作系統版本。我需要知道狀態欄的顏色。 Android 2.1應該有一個淺灰色的狀態欄,但是運行Android 2.1的三星Galaxy S有一個黑色狀態欄。 – Luke 2011-04-21 07:32:24

+0

你將不得不從[BUILD](http://developer.android.com/reference/android/os/Build.html), 找出你的設備,別忘了人們也有主題。 簡化了框架和狀態欄應用程序,這將是最好的... [這裏是鏈接](http://grepcode.com/file/repository.grepcode.com/java/ ext/com.google.android/android/2.3_r1/com/android/systemui/statusbar/StatusBarService.java#StatusBarService.onCreate%28%29)如果你想嘗試挖掘StatusBar – 2011-04-21 07:43:10

+0

好吧,這就是爲什麼我認爲我可能能夠訪問狀態欄的背景屬性,然後確定繪圖或顏色的顏色。即使設置了主題而不是使用BUILD,這也可以讓我提供最好的圖標。 – Luke 2011-04-21 12:44:24

1

隨着adb(你會發現在android開發工具包中)使用「pull」命令,或者只是一個根文件管理器,你需要訪問/system/framework/framework-res.apk。解壓縮,就像使用zip(!)apktool。在裏面,你會發現圖形的位圖。選擇那些包含「狀態欄」的人,你只要看看他們,你就會看到你是否想用它來彌補,或者不。

棘手的部分是讓他們回來,你需要重新壓縮它,與apktool。位圖有一個額外的行,並有關於拉伸它們的信息。 Apktool擺脫那些,或者更好地放置它們,只是隱藏它們。

真的很難的部分是,將時鐘和通知顏色從白色變爲黑色,並且爲此您需要修改classes.dex,這是我卡住的部分。

簡單的方法是下載並安裝CyanogenMod,它可以讓你訪問這些參數。

乾杯。

0

我開發了以下方法來猜測狀態欄背景的光照值。它實際上獲取狀態欄項目的背景顏色,但我認爲整個狀態欄應具有相似的顏色。我使用這種方法來區分,是否加載我的狀態通知圖標的黑色或白色版本。

/** 
* Returns estimated value of the lightness of the status bar background 
* @return 
*/ 
private int getStatusBarBackgroundLightValue() 
{ 
    // better this than nothing 
    Drawable bg = getResources().getDrawable(android.R.drawable.status_bar_item_background); 
    int height = Math.max(1, bg.getIntrinsicHeight()); 
    int width = Math.max(1, bg.getIntrinsicWidth()); 
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    bg.setBounds(0, 0, width, height); 
    bg.draw(canvas); 

    long sum = 0; 
    for (int x=0; x<width; x++){ 
     for (int y=0; y<height; y++){ 
      int color = bitmap.getPixel(x, y); 
      int r = (color >> 16) & 0xFF; 
      int g = (color >> 8) & 0xFF; 
      int b = (color) & 0xFF; 
      int max = Math.max(r, Math.max(g, b)); 
      int min = Math.min(r, Math.min(g, b)); 
      int l = (min + max)/2; 
      sum = sum + l; 
     } 
    } 
    bitmap.recycle(); 
    bitmap = null; 
    canvas = null; 
    bg = null; 
    sum = sum/(width * height); 
    // should be [0..255] 
    return (int)Math.min(255, Math.max(sum, 0)); 
}