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

如何在Android中获得选择颜色?,android,colors,selector,Android,Colors,Selector,我需要得到Android用来绘制ListView和编辑文本选择的选择颜色。我知道这些控件使用用户选择器来绘制它们的状态,但我已经编写了一些小部件,我想匹配它们运行的平台的选择颜色,而定义的可绘制项无法做到这一点,因为它们使用的是9个补丁图像而不是颜色 我已经查看了所有Android源代码,还没有找到一个颜色选择器或颜色常量可以用来获取我要查找的颜色。看看。您可以浏览平台和Android github镜像。请注意,对于每个版本的Android,此值可能不同。如果要使用平台样式,请不要为控件创建自己

我需要得到Android用来绘制ListView和编辑文本选择的选择颜色。我知道这些控件使用用户选择器来绘制它们的状态,但我已经编写了一些小部件,我想匹配它们运行的平台的选择颜色,而定义的可绘制项无法做到这一点,因为它们使用的是9个补丁图像而不是颜色


我已经查看了所有Android源代码,还没有找到一个颜色选择器或颜色常量可以用来获取我要查找的颜色。

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

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

android-sdk-windows\platforms\android-<Desire API Level>\data\res\drawable-hdpi.
还是像这样呢

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

正如Jignesh所解释的那样,您可以将
列表\u选择器\u背景设置为可绘制的,然后找到它的平均颜色,如所示(我会在初始化代码中这样做,这样您就不必每次都浪费处理它们,但嘿,这是过早的优化)。这应该与主题足够一致,以便让您的小部件根据需要匹配

您的代码可能如下所示:

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;
}
公共静态颜色getPlatformSelectionColor(上下文c){
位图位图=BitmapFactory.decodeResource(c.getResources(),
android.R.drawable.list_选择器_背景);
长红桶=0;
长绿桶=0;
长蓝袋鼠=0;
长像素计数=0;
对于(int y=0;y
您可以尝试以下方法:

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

对于谷歌拥有的设备,你可以很容易地做到这一点,但对于其他制造商来说则不然,因为大多数制造商已经覆盖了包括果冻豆在内的几乎所有android版本的默认颜色、布局、背景等


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

你能清楚地解释一下吗?为什么是这个而不是@android:drawable/list\u selector\u background?它是list\u selector\u holo\u dark或同等的holo light版本;这些是Honeycom和更高版本中的默认设置。列表选择器背景为非全息版本,用于姜饼及以下食品。你可以参考:android的api级别是什么:drawable/list\u selector\u后台兼容?参考lokoko对这个问题的回答。
android:background="?android:attr/selectableItemBackground"