Я пытаюсь создать ColorStateList
программно с помощью этого:
ColorStateList stateList = new ColorStateList(states, colors);
Но я не уверен, каковы два параметра.
Согласно документации:
public ColorStateList (int[][] states, int[] colors)
Добавлено на уровне API 1
Создает ColorStateList, который возвращает указанное отображение из состояний в цвета.
Может кто-нибудь объяснить мне, как создать это?
В чем смысл двумерного массива для состояний?
android
android-color
Anukool
источник
источник
{pressed}
,{focused}
,{-enabled}
,{}
. Для переключения это может быть{checked, pressed}
,{pressed}
,{checked, focused}
,{focused}
,{checked}
,{-enabled}
,{}
. Или переключатель , который игнорирует фокус:{checked, pressed}
,{pressed}
,{checked}
,{-enabled}
,{}
.Первое измерение - это массив наборов состояний, второе - это сам набор состояний. В массиве цветов перечислены цвета для каждого соответствующего набора состояний, поэтому длина массива цветов должна соответствовать первому измерению массива состояний (или произойдет сбой при использовании состояния). Вот и пример:
надеюсь это поможет.
Пример РЕДАКТИРОВАТЬ: список состояний цвета xml, например:
будет выглядеть так
источник
new int[]{}
последний - как показано в последнем кодовом блоке этого ответа. Единственное отрицательное значение, которое я обычно использую, это "-enabled". Другой пример, если вы хотите три различных цвета: «сосредоточены + нажата», «сосредоточены + не нажата», «нажал + не сфокусирован», вы можете просто положить{focused, pressed}
,{focused}
,{pressed}
. Первый «истинный» будет использоваться.{pressed}
,{-pressed}
,{focused}
,{-focused
}. Проблема в том, что{pressed}
и{-pressed}
охватывают ВСЕ возможности (кнопка либо нажата, либо не нажата), поэтому никакие цвета, перечисленные позже, никогда не будут использоваться.!Иногда этого будет достаточно:
источник
К сожалению, ни одно из решений не работает для меня.
Это конструктор из исходного кода:
источник
Вот пример того, как
ColorList
программно создать в Kotlin:источник
Отражая ответ Джонатана Эллиса , в Kotlin вы можете определить вспомогательную функцию, чтобы сделать код немного более идиоматичным и проще для чтения, поэтому вы можете написать это вместо этого:
colorStateListOf
может быть реализовано так:У меня тоже есть:
Так что я могу вызывать одно и то же имя функции, независимо от того, селектор ли это или один цвет.
источник
Мой класс строителей для создания
ColorStateList
Пример использования
источник
если вы используете ресурс Colors.xml
источник
getResources()
не рекомендуется, это сейчасContextCompat.getColor(this,R.color.colorname);
илиContextCompat.getColor(getActivity(),R.color.colorname);
для использования во фрагментеnew int[0]
(как элемент в списке первого параметра) это массив нулевой длины, представляющий установку цвета по умолчанию. Здесь это единственный элемент, который означает, что оттенок применяется ко всем состояниям кнопки. Это эквивалентно тому, чтоnew int[]{}
видно в ответе Роджера Алиена.