【问题标题】:How do you get the selection color in Android?你如何在Android中获得选择颜色?
【发布时间】:2011-10-12 19:38:29
【问题描述】:

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

我查看了所有 Android 源代码,但没有找到可用于获取所需颜色的颜色选择器或颜色常量。

【问题讨论】:

  • 你能解释清楚吗?

标签: android colors selector


【解决方案1】:

你可以试试这个:

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

【讨论】:

  • 为什么是这个而不是@android:drawable/list_selector_background?
  • 是 list_selector_holo_dark 或者等效的全息灯版本;这些是 Honeycomb 及更高版本中的默认值。 list_selector_background 是非全息版本,用于 Gingerbread 及以下版本。您可以参考:stackoverflow.com/questions/9250215/…
【解决方案2】:

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

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);

【讨论】:

  • android:drawable/list_selector_background兼容什么api级别?
  • 参考lokoko对这个问题的回答。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    你可以得到list_selector_backgrounddrawable,正如Jignesh所解释的那样,然后找到它的平均颜色,如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;
    }
    

    【讨论】:

      【解决方案5】:

      对于 google 拥有的设备,您可以轻松实现这一点,但对于其他制造商则不然,因为大多数制造商已经覆盖了几乎所有 android 版本(包括 jelly-beans)的默认颜色、布局、背景等。

      因此,理想情况下不建议这样做,而且很难遵循每个人的设计准则。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-11
        • 2021-08-12
        • 2016-08-07
        • 2015-10-18
        • 2017-04-24
        • 2017-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多