如何查看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提供的设计指南不符。
答案 0 :(得分:1)
通常你会想通过manifest文件绑定它,但是有办法获取值: 使用Build.VERSION.SDK_INT并根据Build.VERSION_CODES进行检查, http://developer.android.com/reference/android/os/Build.VERSION.html
你可以从Android开发博客帖子here
中获得更有趣的内容- 编辑 -
你必须从BUILD找出你所使用的设备,但不要忘记人们也有主题......
如果你想尝试挖掘StatusBar并从原始的Framework.jar中获取它,那么如果你想要挖掘一下这个框架和状态栏应用程序,那将是最好的... here is a link。
以下链接指向guy who mentions他处理状态栏的方式。
答案 1 :(得分:1)
使用adb(您可以在Android开发工具包中找到)" pull"命令,或只是根文件管理器,您需要访问/system/framework/framework-res.apk。解压缩,就像拉链使用(!)apktool一样。在里面,你会发现图形的位图。选择包含"状态栏"的那些,您只需查看它们,您就会看到是否要使用它进行批量处理。
棘手的部分是使用apktool让他们回来,因为你需要重新压缩它。位图有一个额外的行,有关于拉伸它们的信息。 Apktool摆脱了那些,或更好的放,只是隐藏它们。
真正困难的部分是,你在哪里更改时钟,以及通知颜色,从白色到黑色,为此你需要修改classes.dex,我被卡住了。
简单方法是下载并安装CyanogenMod,它允许您访问这些参数。
干杯。
答案 2 :(得分: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));
}