Я использую стандартный элемент управления Switch с темой holo.light в приложении ICS.
Я хочу изменить выделенный цвет или цвет состояния кнопки переключения со стандартного голубого на зеленый.
Это должно быть легко, но я не могу понять, как это сделать.
android
togglebutton
JamesSugrue
источник
источник
Switch
потом указать на этот пользовательский селектор.Ответы:
На данный момент лучше использовать SwitchCompat из библиотеки AppCompat.v7. Затем вы можете использовать простой стиль, чтобы изменить цвет ваших компонентов.
ref: Блог разработчиков Android
РЕДАКТИРОВАТЬ :
Способ его правильного применения является сквозным,
android:theme="@style/Theme.MyTheme"
а также его можно применять к родительским стилям, таким как EditTexts, RadioButtons, Switches, CheckBoxes и ProgressBars:источник
colorAccent
, «выключен» естьcolorSwitchThumbNormal
. При использованииAppCompat
темы, вы должны использовать,SwitchCompat
а неSwitch
. Если вы используете SDK 23+, вы можете использоватьandroid:thumbTint
иandroid:thumbTintMode
сColorStateList
.Поздно на вечеринку, но я так и сделал
Стиль
Цвета
раскладка
результат
См изменение цвета для включения и выключения переключателя
источник
SwitchCompat
;)Это работает для меня (требуется Android 4.1):
Обратите внимание, что состояние «по умолчанию» должно быть добавлено последним, как показано здесь.
Единственная проблема, которую я вижу, состоит в том, что «большой палец» переключателя теперь кажется больше, чем фон или «дорожка» переключателя. Я думаю, это потому, что я все еще использую изображение дорожки по умолчанию, вокруг которого есть свободное место. Однако, когда я попытался настроить изображение дорожки, используя эту технику, мой переключатель, как оказалось, имел высоту 1 пиксель с появлением лишь небольшого количества включенного / выключенного текста. Должно быть решение для этого, но я еще не нашел его ...
Обновление для Android 5
В Android 5 приведенный выше код заставляет переключатель полностью исчезнуть. Мы должны иметь возможность использовать новый метод setButtonTintList , но, похоже, это игнорируется для переключателей. Но это работает:
Обновление для Android 6-7
Как сказал Херувим в комментариях, мы можем использовать новое,
setThumbTintList
и это сработало, как я ожидал. Мы также можем использоватьsetTrackTintList
, но это применяет цвет как смесь, в результате чего в темных цветовых темах оно темнее, чем ожидалось, а в светлых темах светлее, чем ожидалось, иногда до такой степени, что оно становится невидимым. В Android 7 мне удалось минимизировать это изменение, переопределив режим оттенка дорожки , но я не смог получить приличные результаты из этого в Android 6. Возможно, вам потребуется определить дополнительные цвета, которые компенсируют смешивание. (У вас когда-нибудь возникало ощущение, что Google не хочет, чтобы мы настраивали внешний вид наших приложений?)источник
switchInput.setThumbTintList(buttonStates);
работает и для Nougat. API 21-22: используйте DrawableCompat в соответствии с рекомендациями @Alexey. ОнswitchInput.setButtonTintList(buttonStates);
не работал для меня, он не окрашивал состояния для моего Switch. API ниже 21:switchInput.getThumbDrawable().setColorFilter(someColor, PorterDuff.Mode.SrcIn);
это сработало для меня. Я также работал с Xamarin, поэтому, если вы используете Xamarin.Forms, переведите их в C # в средствах визуализации Android.Чтобы изменить стиль Switch без использования style.xml или Java-кода, вы можете настроить переход на макет XML:
Это атрибут android: thumbTint и android: trackTint, который позволил вам настроить цвет
Это визуальный результат для этого XML:
источник
app:thumbTint
вместоandroid:thumbTint
и измененияswitch
сSwitchCompat
Создайте пользовательский переключатель и переопределите setChecked для изменения цвета:
источник
И внутри checker_track.xml:
источник
thumbTint
применяется только на Android API 21 и выше. Как, если я хочу изменить цвет ниже Android 21?Хотя ответ SubChord является правильным, он на самом деле не отвечает на вопрос о том, как установить цвет «on», не затрагивая также другие виджеты. Чтобы сделать это, используйте
ThemeOverlay
в styles.xml:И сослаться на это в вашем переключателе:
При этом он влияет ТОЛЬКО на цвет представлений, к которым вы хотите его применить.
источник
Я решил это, обновив Цветовой фильтр, когда состояние переключателя изменилось ...
источник
Может быть, уже немного поздно, но для кнопок переключения кнопка toogle не является ответом, вы должны изменить drawable в параметре xml переключателя:
источник
сделать drawable "newthumb.xml"
и сделать рисование "newtrack.xml"
и добавьте его в Switch:
источник
trackTint
илиthumbTint
. Нужно написать это вручную, и это работает.В Android Lollipop и выше определите его в стиле вашей темы:
источник
Создайте свое собственное изображение из 9 патчей и установите его в качестве фона кнопки переключения.
http://radleymarx.com/2011/simple-guide-to-9-patch/
источник
Решение, предложенное Arlomedia, сработало для меня. По поводу его вопроса о лишнем пространстве я решил убрать все прокладки с переключателя.
РЕДАКТИРОВАТЬ
Как и просил, вот что у меня есть.
В файле макета мой переключатель находится внутри линейного макета и после TextView.
Так как я работаю с Xamarin / Monodroid (мин. Android 4.1), мой код:
swtch_EnableEdit предварительно определен так (Xamarin):
Я вообще не устанавливаю отступы и не вызываю .setPadding (0, 0, 0, 0).
источник
Вы можете сделать собственный стиль для переключателя виджета, который использует цветовой акцент в качестве значения по умолчанию, когда вы делаете собственный стиль для него
источник
Вы можете попробовать эту библиотеку, легко изменить цвет для кнопки переключения.
https://github.com/kyleduo/SwitchButton
источник
Попробуйте найти правильный ответ здесь: Селектор на цвет фона TextView . В двух словах вы должны создать Shape в XML с цветом, а затем присвоить ему состояние «флажок» в вашем селекторе.
источник
Я не знаю, как это сделать из Java, но если у вас есть стиль, определенный для вашего приложения, вы можете добавить эту строку в свой стиль, и у вас будет нужный мне цвет, я использовал # 3F51B5
источник
Самый простой способ - определить оттенок дорожки и установить режим оттенка src_over, чтобы убрать 30% прозрачности.
toggle_style.xml
источник
В дополнение к существующим ответам: вы можете настроить большой палец и трек, используя селекторы в
res/color
папке, например:switch_track_selector
switch_thumb_selector
Используйте эти селекторы для настройки оттенков дорожки и большого пальца:
Имейте в виду , что если вы используете Standart
Switch
иandroid
пространство имен для этих атрибутов, он будет работать только для API 23 и позже, поэтому использованиеSwitchCompat
сapp
пространством имен вxmlns:app="http://schemas.android.com/apk/res-auto"
качестве универсального решения.Результат:
источник
В XML вы можете изменить цвет как:
Динамически вы можете изменить как:
источник
Решение для Android Studio 3.6:
Изменяет цвет текста в определенном значении файла XML (yourColor).
источник