我開發了以下方法來猜測狀態欄背景的光照值。它實際上獲取狀態欄項目的背景顏色,但我認爲整個狀態欄應具有相似的顏色。我使用這種方法來區分,是否加載我的狀態通知圖標的黑色或白色版本。
/**
* 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));
}
是的,它允許我檢查Android操作系統版本。我需要知道狀態欄的顏色。 Android 2.1應該有一個淺灰色的狀態欄,但是運行Android 2.1的三星Galaxy S有一個黑色狀態欄。 – Luke 2011-04-21 07:32:24
你將不得不從[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
好吧,這就是爲什麼我認爲我可能能夠訪問狀態欄的背景屬性,然後確定繪圖或顏色的顏色。即使設置了主題而不是使用BUILD,這也可以讓我提供最好的圖標。 – Luke 2011-04-21 12:44:24