- Switch
- SwitchCompat
- Изменить цвет переключателя на Android
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Темы и стили в Android без магии. И как их готовить с SwitchCompat
- Содержание
- Введение
- Новый стиль для SwitchCompat
- Стиль в верстке
- Стиль в теме. Тема назначается через Manifest
- Стиль в теме. Тема назначается программно
- Другие View
- Ресурсы
- Изменить цвет «на» переключателя
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-документа:
Ответ 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.
Тема может быть указана в манифесте для всего приложения
Или для конкретной активити
Теперь все SwitchCompat будут иметь новый внешний вид. Без изменения в верстке.
- Плюсы — Можем менять внешний вид для всего приложения сразу.
- Минусы — налету менять не получится.
Стиль в теме. Тема назначается программно
Для того, чтобы установить тему для активити программно, нужно вызвать метод активити setTheme(themeResId).
Давайте менять тему активити в зависимости от состояния Switch.
- Устанавливаем тему программно, вызвав setTheme. Метод надо вызывать до super.onCreate(savedInstanceState). В onCreate у нас происходит инициализация фрагментов (когда они есть).
- Задаем начальное состояние Switch в зависимости от темы.
- Устанавливаем листенер, который при изменении 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» в вашем селекторе.
Источник