ColorStateList
— это объект, который можно определить в XML и применить как цвет, который фактически меняет цвета в зависимости от состояния объекта View
, к которому он применяется. Например, виджет Button
может находиться в одном из нескольких состояний: нажат, в фокусе или ни в одном из них. Используя список цветовых состояний, вы можете указать разные цвета для каждого состояния.
Вы описываете список состояний в файле XML. Каждый цвет определяется в элементе <item>
внутри одного элемента <selector>
. Каждый <item>
использует различные атрибуты для описания состояния, в котором он используется.
При каждом изменении состояния список состояний просматривается сверху вниз и используется первый элемент, соответствующий текущему состоянию. Выбор основан не на «лучшем» совпадении, а на первом элементе, который соответствует минимальным критериям штата.
Примечание. Если вы хотите предоставить статический ресурс цвета, используйте простое значение цвета .
- расположение файла:
-
res/color/ filename .xml
Имя файла используется в качестве идентификатора ресурса. - тип данных скомпилированного ресурса:
- Указатель ресурса на
ColorStateList
- ссылка на ресурс:
- На Java:
R.color. filename
В XML: @[ package :]color/ filename
- синтаксис:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:color="hex_color"
android:lStar="floating_point_value"
android:state_pressed=["true" | "false"]
android:state_focused=["true" | "false"]
android:state_selected=["true" | "false"]
android:state_checkable=["true" | "false"]
android:state_checked=["true" | "false"]
android:state_enabled=["true" | "false"]
android:state_window_focused=["true" | "false"] />
</selector>
- элементы:
-
<selector>
- Необходимый. Это корневой элемент. Содержит один или несколько элементов
<item>
. Атрибуты:
-
xmlns:android
- Нить . Необходимый. Определяет пространство имен XML:
"http://schemas.android.com/apk/res/android"
.
-
<item>
- Определяет цвет, используемый в определенных состояниях, как описано его атрибутами. Это дочерний элемент элемента
<selector>
. Атрибуты:
-
android:color
- Шестнадцатеричный цвет . Необходимый . Цвет задается значением RGB и дополнительным альфа-каналом.
Значение всегда начинается с символа решетки ( #
), за которым следует информация Alpha-Red-Green-Blue в одном из следующих форматов:
- # RGB
- # АРГБ
- # РРГГББ
- # ААРРГГББ
-
android:lStar
- Плавающая точка . Необязательный . Этот атрибут изменяет воспринимаемую яркость базового цвета. Он принимает либо значение с плавающей запятой от 0 до 100, либо атрибут темы, который разрешается соответствующим образом. Общий цвет элемента рассчитывается путем преобразования базового цвета в цветовое пространство, удобное для специальных возможностей, и установки для его L* значения, указанного в атрибуте
lStar
. Пример: android:lStar="50"
-
android:state_pressed
- Логическое значение .
"true"
если этот элемент используется при касании объекта, например при касании или нажатии кнопки. Это "false"
если этот элемент используется по умолчанию, в ненажатом состоянии. -
android:state_focused
- Логическое значение .
"true"
если этот элемент используется, когда объект находится в фокусе, например, когда кнопка выделяется с помощью трекбола или крестовины. Это "false"
если этот элемент используется по умолчанию, в несфокусированном состоянии. -
android:state_selected
- Логическое значение .
"true"
если этот элемент используется при выборе объекта, например при открытии вкладки. Это "false"
если этот элемент использовался, когда объект не выбран. -
android:state_checkable
- Логическое значение .
"true"
если этот элемент используется, когда объект можно проверить. Это "false"
если этот элемент используется, когда объект не может быть проверен. Полезно только в том случае, если объект может переходить между проверяемым и не проверяемым виджетом. -
android:state_checked
- Логическое значение .
"true"
если этот элемент используется при проверке объекта. Это "false"
если оно используется, когда объект не выбран. -
android:state_enabled
- Логическое значение .
"true"
если этот элемент используется, когда объект включен и способен получать события касания или щелчка. Это "false"
если оно используется, когда объект отключен. -
android:state_window_focused
- Логическое значение .
"true"
если этот элемент используется, когда окно приложения находится в фокусе, что означает, что приложение находится на переднем плане. Это "false"
если этот элемент используется, когда окно приложения не имеет фокуса, например, если панель уведомлений опущена или появляется диалоговое окно.
Примечание. Применяется первый элемент в списке состояний, соответствующий текущему состоянию объекта. Таким образом, если первый элемент в списке не содержит ни одного из предыдущих атрибутов состояния, он применяется каждый раз. По этой причине поместите значение по умолчанию последним, как показано в следующем примере.
- пример:
- XML-файл, сохраненный в
res/color/button_text.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#ffff0000"/> <!-- pressed -->
<item android:state_focused="true"
android:color="#ff0000ff"/> <!-- focused -->
<item android:color="#ff000000"/> <!-- default -->
</selector>
Следующий XML-код макета применяет список цветов к View
:
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:textColor="@color/button_text" />
- см. также: