如何查看 Android 中的状态栏颜色?
为什么我需要检查这个?我根据 the design guidelines 创建了状态栏图标但是在某些设备(Samsung Galaxy S)上,状态栏是黑色的,并且它运行的是 Android 2.1。
状态栏图标的建议在 Android 2.3 (Nexus S) 和模拟器(较早的 Android 2.1)中看起来很棒,默认的浅灰色状态栏。然而,推荐用于 pre-2.3 的黑色图标在 Samsung Galaxy S 上看起来并不清晰。
如果 Android 运行 2.1 或 2.2 且状态栏为黑色,我想提供一个白色图标。
基本上,问题在于 Android 设计指南并没有真正涵盖像 Samsung Galaxy S 这样更改了 UI 的手机。例如,运行 Android 2.1 的 Samsung Galaxy S 应该有一个浅灰色的状态栏,但它有一个黑色的一。这不符合 Google 提供的设计指南。
最佳答案
我开发了以下方法来猜测状态栏背景的光值。它实际上获得了一个状态栏项目的背景颜色,但我假设整个状态栏应该有相似的颜色。我使用这种方法来区分是加载我的状态通知图标的黑色版本还是白色版本。
/**
* 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 中的状态栏颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5739927/