我需要获取Android用于绘制ListView和EditText选择的选择颜色。我知道这些控件使用选择器来绘制它们的状态,但我编写了一些小部件,我希望它们与平台运行的选择颜色匹配,而定义的可绘制对象不能做到这一点,因为它们使用9个图像而不是颜色。
我已经查看了整个Android源代码,但没有找到可以使用的颜色选择器或颜色常量来获取我正在寻找的颜色。
我已经查看了整个Android源代码,但没有找到可以使用的颜色选择器或颜色常量来获取我正在寻找的颜色。
android:background="?android:attr/selectableItemBackground"
您可以从这里获取所有资源。
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);
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;
}
对于谷歌拥有的设备,您可以轻松实现此目标,但对于其他制造商来说则不是这样,因为大多数制造商已经覆盖了默认颜色、布局、背景等几乎所有版本的Android,包括果冻豆。
因此,理想情况下,不建议并且也很难遵循每个人的设计指南。