Kenny
Kenny

Reputation: 815

How do you get the selection color in Android?

I need to get the selection color used by Android to draw ListView and EditText selection. I know these controls user selectors to draw their states, but I've written a few widgets that I want to match the selection color of the platform they are running on and the drawables that are defined can't do that because they are using 9 patch images instead of colors.

I've looked all through the Android source and haven't found a color selector or color constant I can use to get the color I'm looking for.

Upvotes: 8

Views: 6152

Answers (5)

Pawan Maheshwari
Pawan Maheshwari

Reputation: 15366

You can achieve easily achieve this for google owned devices but not for other manufacturers as most of the manufacturers have overridden the default colors, layouts, backgrounds, etc for almost all the versions of android including jelly-beans.

So ideally its not recommended and also tough to follow each and everyone's design guidelines.

Upvotes: 0

lokoko
lokoko

Reputation: 5803

You could try this :

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

Upvotes: 4

Oleg Vaskevich
Oleg Vaskevich

Reputation: 12672

You could just get the list_selector_background drawable, as explained by Jignesh, and then find its average color as shown in this answer (I'd do it in your initialization code so you don't have to waste processing them every time, but hey, that's premature optimization). That should be consistent enough with the theme to let your widgets match as needed.

Your code could look like this:

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

Upvotes: 0

Jignesh Ansodariya
Jignesh Ansodariya

Reputation: 12685

you can get all the resource from here

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

or you can use directly like this

android:background="@android:drawable/list_selector_background"

or like this also

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

Upvotes: 3

Vadim Kotov
Vadim Kotov

Reputation: 8284

Take a look at this answer. You can browse through the platform colors and styles at the Android github mirror. Please note this values can be different for every version of Android. If you want to use platform styles, just don't create your own custom selectors for the controls. Hope it will help.

Upvotes: 1

Related Questions