你如何在Android中获得选择颜色?

时间:2011-10-12 19:38:29

标签: android colors selector

我需要获取Android使用的选择颜色来绘制ListView和EditText选择。我知道这些控制用户选择器来绘制它们的状态,但是我写了一些我想要匹配它们运行的​​平台的选择颜色的小部件,并且定义的drawable不能这样做,因为它们使用9修补图像而不是颜色。

我已经浏览了整个Android源代码,并且没有找到颜色选择器或颜色常量,我可以使用它来获取我正在寻找的颜色。

5 个答案:

答案 0 :(得分:4)

你可以试试这个:

android:background="?android:attr/selectableItemBackground"

答案 1 :(得分:3)

你可以从这里获得所有资源

android-sdk-windows\platforms\android-<Desire API Level>\data\res\drawable-hdpi.

或者您可以像这样直接使用

android:background="@android:drawable/list_selector_background"

或者像这样

Drawable d = getResources().getDrawable(android.R.drawable.list_selector_background);

答案 2 :(得分:1)

看看this answer。您可以在Android github镜像中浏览平台colorsstyles。请注意,每个Android版本的此值都可能不同。如果您想使用平台样式,请不要为控件创建自己的自定义选择器。希望它会有所帮助。

答案 3 :(得分:0)

你可以按照Jignesh的说明得到list_selector_background drawable,然后找到它的平均颜色,如 this answer 所示(I请在初始化代码中执行此操作,这样您就不必每次都浪费处理它们,但是嘿,这是不成熟的优化。这应与主题保持一致,让您的小部件根据需要匹配。

您的代码可能如下所示:

public static Color getPlatformSelectionColor(Context c) {
    Bitmap bitmap = BitmapFactory.decodeResource(c.getResources(),
                                           android.R.drawable.list_selector_background);
    long redBucket = 0;
    long greenBucket = 0;
    long blueBucket = 0;
    long pixelCount = 0;

    for (int y = 0; y < bitmap.getHeight(); y++)
    {
        for (int x = 0; x < bitmap.getWidth(); x++)
        {
            Color c = bitmap.getPixel(x, y);

            pixelCount++;
            redBucket += Color.red(c);
            greenBucket += Color.green(c);
            blueBucket += Color.blue(c);
            // does alpha matter?
        }
    }

    Color averageColor = Color.rgb(redBucket / pixelCount,
                                    greenBucket / pixelCount,
                                    blueBucket / pixelCount);
    return averageColor;
}

答案 4 :(得分:0)

您可以轻松实现谷歌拥有的设备,但不能为其他制造商实现这一点,因为大多数制造商已经覆盖了几乎所有Android版本(包括果冻豆)的默认颜色,布局,背景等。

理想情况下,不推荐使用它,也很难遵循每个人的设计指南。