如何在Android中检查状态栏颜色?

3
如何在Android中检查状态栏颜色?
我为什么需要检查这个?我按照设计指南创建了我的状态栏图标,但是在某些设备(三星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这样更改UI的手机。例如,运行Android 2.1的三星Galaxy S应该有一个浅灰色的状态栏,但它却有一个黑色的状态栏。这与Google提供的设计指南不符。
3个回答

2
我开发了以下方法来猜测状态栏背景的亮度值。它实际上获取了一个状态栏项目的背景颜色,但我假设整个状态栏应该具有类似的颜色。我使用这种方法来区分是否加载我的状态通知图标的黑色或白色版本。
/**
 * 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));
}

1

通常情况下,你应该通过清单文件进行绑定,但是有一种方法可以获取值: 使用 Build.VERSION.SDK_INT 并将其与 Build.VERSION_CODES 进行比较, http://developer.android.com/reference/android/os/Build.VERSION.html

你可以从 Android 开发者博客文章中获得更有趣的阅读体验 在这里

--编辑--

你需要从 BUILD 找出自己的设备,但别忘了人们也有主题...

除非你撕毁框架和状态栏应用程序,否则这将是最好的...如果你想尝试挖掘 StatusBar 并从原始的 Framework.jar 中获取它,这里是一个链接

这里有一个链接,指向一个提到他如何处理状态栏的人。


是的,这让我可以检查Android操作系统的版本。但我需要知道状态栏的颜色。Android 2.1应该有浅灰色的状态栏,然而运行Android 2.1的三星Galaxy S却有黑色的状态栏。 - Luke
你需要从BUILD中找出你所在的设备,别忘了人们也有主题...除非你撕毁框架和状态栏应用程序,否则这将是最好的选择... 这里有一个链接,如果你想深入了解StatusBar,可以试着挖掘一下。 - Dr.J
好的,这就是为什么我认为我可以访问状态栏的背景属性,然后从可绘制或颜色中确定颜色。这将使我即使设置了主题,也能提供最佳图标,而不是使用BUILD。 - Luke
祝你好运,为多个设备的默认主题找到所有最佳图标 :X - Dr.J

1

使用adb(您将在android开发工具包中找到)与“pull”命令,或仅使用root文件管理器,您需要访问/system/framework/framework-res.apk。解压缩它,就像使用zip一样!apktool。里面,您会发现图形的位图。选择那些包含“statusbar”的图像,您只需查看它们,就能看出您是否想要进行大规模修改。

棘手的部分是将它们拿回来,您需要使用apktool重新压缩它。这些位图有一个额外的行,其中包含拉伸它们的信息。Apktool去掉了它们,或者更好地说,只是隐藏了它们。

真正困难的部分是从白色更改时钟和通知颜色为黑色,为此您需要修改classes.dex,我陷入其中的那个部分。

简单的方法是下载并安装CyanogenMod,它可以让您访问这些参数。

干杯。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接