Как изменить цвет RadioButtons в PopupMenu?

Как установить цвет RadioButtons в проверяемом PopupMenu. Я использую версию AppCompat. Я успешно установил цвет фона и цвет текста с помощью стилей, но не могу понять, как установить цвет переключателей.

Это то, что у меня есть до сих пор;

    <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
        <item name="popupMenuStyle">@style/myPopupMenuStyle</item>
        <item name="textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
        <item name="textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
    </style>

   <style name="myPopupMenuStyle" parent="Widget.AppCompat.PopupMenu">
        <item name="android:popupBackground">@color/accent</item>
        <item name="android:textColor">@android:color/white</item>
    </style>


   <style name="myPopupMenuTextAppearanceSmall" parent="TextAppearance.AppCompat.Widget.PopupMenu.Small">
        <item name="android:textColor">@android:color/white</item>
    </style>

    <style name="myPopupMenuTextAppearanceLarge" parent="TextAppearance.AppCompat.Widget.PopupMenu.Large">
        <item name="android:textColor">@android:color/white</item>
    </style>

Я пробовал много других атрибутов, но ничего не помогло.


person lionscribe    schedule 15.07.2016    source источник


Ответы (3)


<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
    <item name="colorAccent">@color/radio_button_color</item>
    <item name="android:textColorSecondary">@color/radio_button_color2</item>
</style>

Источник: https://stackoverflow.com/a/26850668/1269953

colorAccent — это основной цвет для ваших переключателей, а textColorSecondary — это дополнительный цвет, когда переключатель не выбран. При использовании colorAccent в AppCompat обратите внимание, что нет префикса android:, это правильный способ его использования в версиях ниже Lollipop.

person Pztar    schedule 15.07.2016
comment
Технически это правильно, но вы можете сделать это, только изменив тему для всего действия или приложения, что мне не нужно. Я хочу специально изменить все цвета только в PopupMenu. - person lionscribe; 19.07.2016
comment
Я сослался на ваш ответ в принятом решении. Спасибо. - person lionscribe; 19.07.2016

На основе ответа Галдино по адресу: https://stackoverflow.com/a/34702166/2661303 и на основе ответа Pztar, и методом проб и ошибок я нашел решение. Я использую AppCompat PopupMenu.
Добавьте в свой файл стилей только следующее (не нужно ничего добавлять в основную тему);

<style name="MyPopupTheme" parent="Widget.AppCompat.PopupMenu">
    <item name="colorAccent">@color/primary_dark</item>
    <item name="android:popupBackground">@color/accent</item>
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textColorSecondary">@android:color/white</item>
</style>

Затем при создании PopupMenu используйте следующее:

Context wrapper = new ContextThemeWrapper(getActivity(), R.style.MyPopupTheme);
PopupMenu popup = new PopupMenu(wrapper, bAnchor, Gravity.END | Gravity.RIGHT | Gravity.TOP, 0, R.style.MyPopupTheme);

Не знаю почему, но даже при использовании ContextThemeWrapper мне все равно приходится передавать стиль конструктору. Поскольку мы используем ContextWrapper, мы используем определенную тему для этого PopupMenu, поэтому мы можем переопределить цвет акцента только для PopupMenu. Итак, теперь у меня есть перевернутое PopupMenu с акцентным цветом в качестве фона, текстом и кнопками белого цвета, а выбранная кнопка — основным цветом.

Надеюсь, это кому-нибудь поможет,
Lionscribe

person lionscribe    schedule 19.07.2016
comment
Вы спасли меня день. Благодарю вас! Не понимаю, почему нельзя применить стиль из темы активности: ‹item name=android:popupMenuStyle›@style/MyPopupTheme‹/item› Это не работает ( - person Oleksandr Albul; 28.02.2017

Простой способ: Android Holo Color выбрать цвет темы, включить переключатель, загрузить zip-файл, скопировать фотографии в drwable и скопируйте файлы XML в drawable и установите их как

здесь < /а>

person theshivamlko    schedule 15.07.2016