Как вы получаете выбор цвета в Android? - PullRequest
9 голосов
/ 12 октября 2011

Мне нужно получить цвет выделения, используемый Android для рисования выбора ListView и EditText. Я знаю, что пользовательские селекторы этих элементов управления рисуют свои состояния, но я написал несколько виджетов, которым я хочу соответствовать цвету выбора платформы, на которой они работают, и определенные элементы рисования не могут этого сделать, потому что они используют 9 патч изображения вместо цветов.

Я просмотрел весь источник Android и не нашел селектора цвета или константы цвета, которые я мог бы использовать, чтобы получить искомый цвет.

Ответы [ 5 ]

4 голосов
/ 18 февраля 2013

Вы можете попробовать это:

android:background="?android:attr/selectableItemBackground"
3 голосов
/ 14 февраля 2013

вы можете получить весь ресурс отсюда

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);
1 голос
/ 13 февраля 2013

Взгляните на этот ответ . Вы можете просматривать платформу цвета и стили в зеркале Android github. Обратите внимание, что эти значения могут быть разными для каждой версии Android. Если вы хотите использовать стили платформы, просто не создавайте свои собственные селекторы для элементов управления. Надеюсь, это поможет.

0 голосов
/ 19 февраля 2013

Этого легко добиться для устройств, принадлежащих Google, но не для других производителей, поскольку большинство производителей переопределили стандартные цвета, макеты, фоны и т. Д. Почти для всех версий Android, включая желейные бобы.

Так что в идеале это не рекомендуется, а также неукоснительно следовать всем и каждому руководству по проектированию.

0 голосов
/ 17 февраля 2013

Вы можете просто получить list_selector_background нарисованное, как объяснил Джинеш, а затем найти его средний цвет , как показано в в этом ответе (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;
}
...