Как изменить цвет switch android

Switch

Switch — ещё один вид переключателей, который появился в Android 4.0 (API 14). Находится в разделах Commons и Buttons. Фактически, это замена немного устаревшего ToggleButton. В новых проектах лучше использовать Switch.

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

При добавлении компонента в макет студия рекомендует использовать использовать SwitchCompat или SwitchMaterial. Общий принцип работы у них одинаковый, отличия касаются дизайна.

Компонент представляет собой полоску с двумя состояниями и сопровождающим текстом. Переключиться можно сдвиганием ползунка или касанием экрана в области компонента (не только на самом ползунке, но и на сопровождающем тексте).

По умолчанию компонент находится в выключенном состоянии. Чтобы установить его в включённом состоянии на этапе разработки, используйте атрибут android:checked=»true».

Сопровождающий текст задаётся в атрибуте android:text. А текст на самом переключателе задаётся при помощи атрибутов android:textOn (методы getTextOn() и setTextOn()) и android:textOff (методы getTextOff() и setTextOff()). Обратите внимание, что сопровождающий текст может быть очень большим и положение самого переключателя относительно этого текста можно регулировать при помощи атрибута android:gravity (смотри пример ниже). Если сопровождающий текст вам не нужен, то не используйте атрибут android:text.

Момент переключения можно отслеживать при помощи слушателя CompoundButton.OnCheckedChangeListener.

SwitchCompat

Студия рекомендует использовать SwitchCompat. Явных отличий у него нет.

Для показа текста на кнопке переключателя установите в true значение атрибута app:showText.

Не забывайте, что данный компонент можно использовать только в активностях типа AppCompatActivity.

Вы можете задать свой стиль для SwitchCompat, добавив строки в styles.xml

Цвет дорожки, вдоль которой двигается ползунок, можно поменять также через стиль:

Источник

Изменить цвет переключателя на Android

Я пытаюсь изменить цвет моего переключателя в Android. Я понимаю, что мне понадобятся новые 9 патчей. Я перешел к http://android-holo-colors.com/ и выбрал свой цвет и выбран (Switch Jelly Bean). Для использования Switch Jelly Bean мне пришлось использовать: https://github.com/BoD/android-switch-backport. Чтобы импортировать его в свой проект, мне пришлось добавить:

для моих стилей, а затем в xml мне нужно использовать такой переключатель:

Теперь все с коммутатором работает нормально. Затем я взял все, что было выведено из генератора цветных головоломок android, и поместил его в соответствующие файлы:

  • drawable (2 файла-селектора)
  • drawable-hdpi (файлы 9patch)
  • drawable-xhdpi (файлы 9patch)
  • drawable-xxhdpi (файлы 9patch)

то я добавил в свой xml:

но это все еще оригинальный синий цвет. Я считаю, что делаю все правильно. Все компилируется (xml, java). Примечание. Я также импортирую org.jraf.android.backport.switchwidget.Switch в свою java. Любые идеи?

ОТВЕТЫ

Ответ 1

По this, (прямой ответ от копирования-вставки BoD):

Вы не должны использовать android:thumb и android:track , но вместо этого app:thumb и app:track И вы должны добавить следующее в корень вашего XML-документа:

Читайте также:  Android клавиатура для программиста

Ответ 2

Самый простой способ в Android Lollipop и выше,

Ответ 3

чтобы изменить цвет переключателя, вы можете использовать два изображения

  • зеленый — когда переключатель включен
  • красный — когда переключатель выключен

теперь поместите этот файл в выпадающую папку

и в XML файле макета используйте его как ниже

Источник

Темы и стили в Android без магии. И как их готовить с SwitchCompat

В предыдущей статье мы рассмотрели как использовать темы и стили на уровне кода, на примере кастомной view. В этой статье давайте разберем несколько способов стилизации стандартного ui элемента, а в частности SwitchCompat.

Содержание

Введение

Не всегда оформление по умолчанию стандартного UI элемента устраивает дизайнера. Давайте разберем, как поменять внешний вид элемента на примере SwitchCompat.

Для решения задачи нам нужно:

  • Создать свой стиль для SwitchCompat.
  • Каким-то образом задать этот стиль SwitchCompat.

Назначить стиль SwitchCompat можно несколькими способами, например:

  • Указывать для каждой view в верстке экранов через атрибут style.
  • Создать тему с переопределенным атрибутом switchStyle и назначить эту тему в манифесте для всего приложения или конкретной активити. Это изменит внешний вид view для всего приложения/активити.
  • Тему также можно установить программно, в коде активити. При необходимости ее можно менять «на лету».

Новый стиль для SwitchCompat

В ресурсах создадим новый стиль MySwitchStyle, наследуем оформление от Widget.AppCompat.CompoundButton.Switch, задав parent. Можно и не наследовать, но тогда придется указать все значения, даже которые мы не планируем менять.

Чтобы что-то изменить, надо переопределить требуемые атрибуты. Атрибуты можно посмотреть в документации.

В документации видим несколько атрибутов. Они указаны в виде, как если бы мы обращались к ним в коде (например, вот так R.styleable.SwitchCompat_android_thumb). Я расшифрую только часть из них, чтобы не было сомнений. Назначение остальных несложно понять из документации.

В коде В xml
SwitchCompat_android_thumb android:thumb
SwitchCompat_thumbTint thumbTint
SwitchCompat_track track
SwitchCompat_trackTint trackTint
  • android:thumb — ресурс для подвижной части SwitchCompat
  • track — ресурс для неподвижной части SwitchCompat
  • thumbTint — позволяет окрашивать подвижную часть в нужные цвета в зависимости от состояния SwitchCompat
  • trackTint — позволяет окрашивать неподвижную часть в нужные цвета в зависимости от состояния SwitchCompat

В качестве примера изменим цвет thumb (кружочка) — пусть во включенном состоянии он будет оранжевым, в выключенном — зеленым. Некрасиво, но наглядно.

Нам понадобится селектор в папке color наших ресурсов. Файл selector_switch_thumb.xml

Теперь зададим атрибут thumbTint в нашем стиле.

Теперь все SwitchCompat, получившие каким-то образом стиль MySwitchStyle, будут выглядеть по-новому.

Стиль в верстке

Самый тривиальный и негибкий способ.

  • Стиль применяется при inflate ресурса layout.
  • Повлиять программно мы никак не можем.
  • Указывать каждый раз в верстке неудобно. И можем забыть.

Стиль в теме. Тема назначается через Manifest

Создаем тему AppTheme и задаем значение атрибуту switchStyle. Значением является наш стиль MySwitchStyle.

Читайте также:  All about android backup

Тема может быть указана в манифесте для всего приложения

Или для конкретной активити

Теперь все SwitchCompat будут иметь новый внешний вид. Без изменения в верстке.

  • Плюсы — Можем менять внешний вид для всего приложения сразу.
  • Минусы — налету менять не получится.

Стиль в теме. Тема назначается программно

Для того, чтобы установить тему для активити программно, нужно вызвать метод активити setTheme(themeResId).

Давайте менять тему активити в зависимости от состояния Switch.

  1. Устанавливаем тему программно, вызвав setTheme. Метод надо вызывать до super.onCreate(savedInstanceState). В onCreate у нас происходит инициализация фрагментов (когда они есть).
  2. Задаем начальное состояние Switch в зависимости от темы.
  3. Устанавливаем листенер, который при изменении Switch меняет тему в настройках и перезапускает активити через метод активити recreate().

Результат

Другие View

Чтобы переопределить стиль для SwitсhView для всего приложения, мы переопределили значение атрибута switchStyle, можно догадаться, что такие атрибуты есть и для других View.

  • editTextStyle
  • checkboxStyle
  • radioButtonStyle

Как их искать? Я просто смотрю исходники, через Android Studio.
Заходим в тему, зажимаем ctrl, кликаем на родителе нашей темы. Смотрим, как описывают тему ребята из Google. Смотрим, какой атрибут определяется и от какого стиля можно отнаследоваться. Пользуемся.

Кусок из темы Base.V7.Theme.AppCompat.Light.

Ресурсы

Статья не претендует на полный справочник. Код умышленно сокращен. Я ставил задачу дать общее понимание — как это работает и зачем это нужно. Дальше все легко ищется в документации и в стандартных ресурсах.

Источник

Изменить цвет «на» переключателя

Я использую стандартное управление Switch с помощью темы holo.light в приложении ICS.

Я хочу изменить выделенный цвет или цвет состояния кнопки Toggle от стандартного голубого до зеленого.

Это должно быть легко, но я не могу понять, как это сделать.

На данный момент лучше использовать SwitchCompat из библиотеки AppCompat.v7. Затем вы можете использовать простой стиль для изменения цвета ваших компонентов.

Ref: Блог разработчиков Android

Поздно к вечеринке, но так я и сделал

Стиль

Цвета

раскладка

результат

См. Изменение цветов для включения и отключения переключателя

Это работает для меня (требуется Android 4.1):

Обратите внимание, что состояние «по умолчанию» должно быть добавлено последним, как показано здесь.

Единственная проблема, которую я вижу, – это то, что «большой палец» переключателя теперь больше фона или «дорожки» переключателя. Я думаю, это потому, что я по-прежнему использую образ трека по умолчанию, в котором есть пустое пространство вокруг него. Однако, когда я попытался настроить образ трека с помощью этой техники, мой переключатель, по-видимому, имел высоту 1 пиксель, и только одна из них отображала текст вкл / выкл. Для этого должно быть решение, но я еще не нашел его …

Обновление для Android 5.1

В Android 5.1 вышеприведенный код полностью отключает коммутатор. Мы должны иметь возможность использовать новый метод setButtonTintList , но это не имело эффекта, когда я его пробовал. Теперь я использую этот код:

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

Читайте также:  Нужно ли антивирус для андроид смартфона

Обновление для Android 5.1.1

По-видимому, метод setButtonTintList () имел ошибку в 5.1, которая была исправлена ​​в 5.1.1. Этот код теперь работает так, как ожидалось, без каких-либо недостатков, которые я вижу:

Обновление для Android 6-7

В Android 6-7 setButtonTintList игнорируется на коммутаторах. Как сказано в комментариях к setThumbTintList , мы можем использовать новый setThumbTintList и работали как ожидалось для меня. Мы также можем использовать setTrackTintList , но это относится к цвету как к смеси, результат которого темнее, чем ожидалось, в темных цветовых тонах и легче, чем ожидалось, в светлых цветовых тонах, иногда до невидимого. В Android 7 мне удалось свести к минимуму эти изменения, переопределив режим отслеживания дорожек, но я не смог получить достойные результаты от того, что было в Android 6. Возможно, вам придется определить дополнительные цвета, которые компенсируют смешение. (У вас когда-либо возникает ощущение, что Google не хочет, чтобы мы настраивали внешний вид наших приложений?)

Создайте настраиваемый переключатель и переопределите setChecked, чтобы изменить цвет:

Может быть, он немного опоздал, но для кнопок переключателей кнопка Google не является ответом, вы должны изменить выделение в xml-параметре переключателя:

Я решил его, обновив цветной фильтр, когда состояние переключателя было изменено …

Хотя ответ SubChord верен, на самом деле не отвечает на вопрос о том, как установить цвет «on», не затрагивая других виджетов. Для этого используйте ThemeOverlay в styles.xml:

И ссылайтесь на него в своем коммутаторе:

При этом он будет ТОЛЬКО влиять на цвет видов, к которым вы хотите применить его.

Создайте собственное изображение с 9 патчами и установите его в качестве фона кнопки переключения.

Чтобы изменить стиль Switch без использования кода style.xml или Java, вы можете настроить переключатель в макет XML:

Это атрибут android: thumbTint и android: trackTint, который позволяет настраивать цвет

Это визуальный результат для этого XML:

В Android Lollipop и выше определите его в своем стиле темы:

Решение, предложенное arlomedia, работало для меня. О его проблеме extraspace я решил удалить все прокладки к коммутатору.

По просьбе, вот что у меня есть.

В файле макета мой коммутатор находится внутри линейного макета и после TextView.

Поскольку я работаю с Xamarin / Monodroid (мин. Android 4.1), мой код:

Swtch_EnableEdit предварительно определяется следующим образом (Xamarin):

Я вообще не устанавливаю paddings, и я не вызываю .setPadding (0, 0, 0, 0).

Я не знаю, как это сделать из java. Но если у вас есть стиль, определенный для вашего приложения, вы можете добавить эту строку в свой стиль, и у вас будет необходимый цвет для меня, я использовал # 3F51B5

Попробуйте найти правильный ответ здесь: Селектор на цвет фона TextView . В двух словах вы должны создать Shape в XML с цветом, а затем назначить его в поле «checked» в вашем селекторе.

Источник

Оцените статью