Исправлено: «Android: Обнаружение фокуса / нажатого цвета» - PullRequest
17 голосов
/ 14 января 2010

Я пытаюсь определить фокус / нажатый цвет для кнопки и других элементов. Это необходимо, потому что я разрабатываю новые компоненты, и важно, чтобы они выглядели как часть платформы. Эти цвета ОРАНЖЕВЫЙ на Android SDK и ЗЕЛЕНЫЙ на 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]" />

Вот и все.

Это результат: альтернативный текст http://img200.imageshack.us/img200/1349/custombutton.png

Ответы [ 3 ]

8 голосов
/ 14 апреля 2010

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

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

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

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

Возможно, вы захотите несколько оптимизировать этот код, но вы поняли идею.

6 голосов
/ 14 января 2010

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

0 голосов
/ 14 января 2010

Это в значительной степени дубликат: Цвет селектора списка Android

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...