Исправлено: "Android: обнаружение фокуса/нажатый цвет"

Я пытаюсь определить фокус/нажатый цвет для кнопки и других элементов. Это необходимо, потому что я разрабатываю новые компоненты, и важно, чтобы они выглядели как часть платформы. Эти цвета являются ORANGE на android sdk и GREEN на HTC SenseUI. Если бы я мог обнаружить этот цвет, мой компонент будет выглядеть как часть платформы на обеих версиях.

Кто-нибудь знает, как это сделать?


Можно создать "селектор", который использует настраиваемое изображение для стандартного состояния и платформы по умолчанию для фокуса/выбора.

Чтобы сделать это, выполните следующие действия: 1) создать файл xml с селектором в "res/drawable" (например, "red_button.xml" ):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true"
        android:drawable="@android:drawable/btn_default" >
    </item>

    <item android:state_focused="true"
        android:drawable="@android:drawable/btn_default" >
    </item>

    <item 
        android:drawable="@drawable/btn_default_red" >
    </item>
</selector>

2) из ​​папки ".../android-sdk-mac/platform/android-1.5/data/res/drawable/" сделать снимок "btn_default_pressed.9.png" и изменить цвет по своему усмотрению (мне нужно было измените его на красный и для этого GIMP достаточно).

3) поместите измененное изображение в "res/drawable" (например, с именем "btn_default_red.9.png" )

4) определить кнопку:

<Button
    android:id="@+id/info_button"
    android:layout_width="wrap_content" 
    android:layout_height="37dip"
    android:layout_marginTop="1dip"
    android:background="@drawable/red_button"
    android:text="[Info]" />

Что все.

Это результат: alt text http://img200.imageshack.us/img200/1349/custombutton.png

Ответ 1

У меня тоже была эта проблема. Как уже говорилось, проблема в том, что фоны - это не простые цвета, они - Drawables, которые могут принимать всевозможные проявления. Тем не менее, я нашел работу, которая может помочь. Если ваш пользовательский компонент выглядит как уже существующий, например. запись Button или ListView, вы можете просто украсть свой фон/селектор и установить это как фон для своего настраиваемого компонента. Например, в своем конструкторе пользовательских компонентов:

  setBackgroundDrawable(new Button(context).getBackground());

или для фона, более подходящего для спискообразных компонентов:

  setBackgroundDrawable(new ListView(context).getSelector());

Вы можете немного оптимизировать этот код, но вы получите эту идею.

Ответ 2

Это не цвета. Это несколько изображений с девятью патчами из StateListDrawable. Я скептически отношусь к тому, что вы сможете определить, что такое цвет, надежный способ, который будет работать во всех устройствах и во всех версиях Android.

Ответ 3

Это почти дубликат: Цвет экрана Android ListView

Кроме того, почему вам нужно определять цвета? Просто ничего, и ваши виджеты будут вписываться в существующую внешность платформы.

Или, если вы пишете настраиваемую тему, просто наследуйте ее от android:Theme.