Как я могу выделить серию кнопок с фоновыми цветами? - PullRequest
1 голос
/ 15 июля 2011

Я сделал макет, который представляет собой просто текстовое представление с надписью «Что вы хотите?», За которым следует ряд кнопок под ним.

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

Есть ли какой-нибудь способ, которым я могу видеть фокус, все еще имея возможность иметь цвет фона на кнопках?

РЕДАКТИРОВАТЬ: нашли решение! Это очень помогло. Стандартная кнопка Android с другим цветом

Ответы [ 3 ]

1 голос
/ 15 июля 2011

Создайте ресурс "селектор" в вашем res / drawable.Это может выглядеть примерно так:

  <?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item 
    android:state_selected="false"
    android:state_pressed="false"
    android:drawable="@color/white" />
  <item 
    android:state_pressed="true"
    android:drawable="@color/orange" />
  <item
    android:state_selected="true"
    android:state_pressed="false"
    android:drawable="@color/blue" />
</selector>

Затем установите фон вашей кнопки следующим образом:

android:background="@drawable/your_selector"
0 голосов
/ 15 июля 2011

Вместо того, чтобы просто менять цвет фона, рассмотрите возможность использования стиля с 9 патчами.Это еще работа, но у вас будет гораздо больше контроля над внешним видом вашего приложения.

Измените макет кнопки так, чтобы он выглядел примерно так (линия стиля - это кикер):

<Button
        style="@style/PushButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

Ваш файл ресурсов styles.xml должен содержать стиль, подобный следующему:

<style name="PushButton">
    <item name="android:background">@drawable/btn</item>
</style>

Тогда содержимое btn.xml (вставленное в res / drawable) должно выглядеть примерно так:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_pressed" 
    android:state_pressed="true" />
<item android:drawable="@drawable/btn_focused"
    android:state_pressed="false"
    android:state_focused="true" />
<item android:drawable="@drawable/btn_default"
    android:state_focused="false"
    android:state_pressed="false" />

Затем можно использовать редактор изображений для создания файлов с именами btn_pressed.9.png, btn_focused.9.png и btn_default.9.png.Удалите эти файлы в свой res / drawable.

Хорошей отправной точкой является приложение Google IO (я взял из него примеры кода). Просто возьмите файлы png и измените их так, чтобы они соответствовали желаемому стилю .

Имейте в виду, что теперь вы можете добавлять в стиль все виды вещей, такие как размер текста, высота и ширина.

0 голосов
/ 15 июля 2011

Вместо того, чтобы применять простой цвет фона к кнопкам, попробуйте вместо этого применить ColorStateList.

Для этого определите новый файл XML в

/res/color/buttonstate.xml

и используйте код, такой как следующий:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="# FOCUSED COLOR HERE"
          android:state_focused="true" />
    <item android:drawable="# DEFAULT COLOR HERE" />
</selector>

Примечания:

  • Вы можете определенно добавить больше цветов для большего количества состояний, таких как нажатие, включение и некоторые другие факторы.
  • В макете или коде просто укажите R.color.buttonstate или @color/buttonstate (имя файла XML).
  • Убедитесь, что цвет по умолчанию последний.Это потому, что он идет вниз по списку и находит первый элемент, который имеет все состояния так же, как он.Если вы не предоставите android:state_focused="false" для элемента по умолчанию и поместите его первым, он всегда будет отображаться.
  • Вы можете сделать аналогичную вещь с drawables и nine-patchdrawables для создания собственных пользовательских стилей кнопок.
...