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

时间:2011-04-21 05:27:25

标签: android icons statusbar

如何查看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提供的设计指南不符。

3 个答案:

答案 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));
}