我需要获取Android使用的选择颜色来绘制ListView和EditText选择。我知道这些控制用户选择器来绘制它们的状态,但是我写了一些我想要匹配它们运行的平台的选择颜色的小部件,并且定义的drawable不能这样做,因为它们使用9修补图像而不是颜色。
我已经浏览了整个Android源代码,并且没有找到颜色选择器或颜色常量,我可以使用它来获取我正在寻找的颜色。
答案 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镜像中浏览平台colors和styles。请注意,每个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版本(包括果冻豆)的默认颜色,布局,背景等。
理想情况下,不推荐使用它,也很难遵循每个人的设计指南。