如何在Android中获取选择颜色?

8
我需要获取Android用于绘制ListView和EditText选择的选择颜色。我知道这些控件使用选择器来绘制它们的状态,但我编写了一些小部件,我希望它们与平台运行的选择颜色匹配,而定义的可绘制对象不能做到这一点,因为它们使用9个图像而不是颜色。
我已经查看了整个Android源代码,但没有找到可以使用的颜色选择器或颜色常量来获取我正在寻找的颜色。

3
你能清晰地解释一下吗? - Veerababu Medisetti
5个回答

4
你可以尝试这样做:
android:background="?android:attr/selectableItemBackground"

为什么要用这个而不是@android:drawable/list_selector_background? - aleb
1
这是list_selector_holo_dark或等效的holo light版本;这些是Honeycomb及以上版本中的默认值。list_selector_background是非holo版本,在Gingerbread及以下版本中使用。您可以参考:https://dev59.com/iWox5IYBdhLWcg3wWzN7 - lokoko

3

您可以从这里获取所有资源。

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

或者你可以像这样直接使用。
android:background="@android:drawable/list_selector_background"

or like this also

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

android:drawable/list_selector_background 兼容哪个 API 级别? - IgorGanapolsky
请参考lokoko的回答。 - Jignesh Ansodariya

1

请查看此答案。您可以浏览 Android github 镜像上的 颜色样式 平台。请注意,这些值可能对每个 Android 版本都有所不同。如果想使用平台样式,请不要为控件创建自定义选择器。希望能帮到您。


0
你可以像Jignesh所解释的那样,获取list_selector_background drawable,然后像this answer中所示,找到它的平均颜色(我会在初始化代码中执行,这样你就不必每次都浪费处理它们,但是,这是过早的优化)。这应该足够符合主题,让你的小部件按需匹配。
你的代码可能如下所示:
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;
}

0

对于谷歌拥有的设备,您可以轻松实现此目标,但对于其他制造商来说则不是这样,因为大多数制造商已经覆盖了默认颜色、布局、背景等几乎所有版本的Android,包括果冻豆。

因此,理想情况下,不建议并且也很难遵循每个人的设计指南。


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