Android: изменить цвет переключателя, который добавляется динамически - PullRequest
0 голосов
/ 05 июня 2018

Android-новичок здесь, поэтому, пожалуйста, потерпите меня ...

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

val menu = nav_view.menu
menu.clear()
val selectedCatalogIsEmpty = selectedCatalogs.isEmpty()
for (catalog in catalogs){
    val menuItem = menu.add(R.id.catalog_items, Menu.FIRST + catalog.catalogId, Menu.NONE, catalog.catalogName)
    val switch = Switch(applicationContext)
    menuItem.actionView = switch
    if(selectedCatalogIsEmpty ||
            selectedCatalogs.contains(catalog.catalogId) ) {
        menuItem.isChecked = true
        switch.isChecked = true
        if(selectedCatalogIsEmpty){
            selectedCatalogs.add(catalog.catalogId)
        }
    }

    switch.setOnCheckedChangeListener { _, isChecked -> menuItem.isChecked = isChecked }
}

val menuItemSettings = menu.add(R.id.settings, Menu.NONE+ 5000, Menu.NONE, "Settings" )

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

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="colorControlNormal">@color/colorWhite</item>
    <item name="colorControlActivated">@color/colorPrimary</item>
</style>

К сожалению, я все еще получаю неправильный цвет во время выполнения.Вместо синего.Я получаю зеленоватый большой палец:

enter image description here

Ясно, что я полностью упустил суть ... Я провел пару поискови люди предлагают использовать SwitchCompat вместо Switch.Я пытался сделать это, но я также должен что-то упустить, потому что я закончил тем, что видел текст в действительно маленьких заглавных буквах (вместо большого пальца, который я получаю с представлением Переключателя).

Спасибо.

С уважением, Луис

1 Ответ

0 голосов
/ 05 июня 2018

Хорошо, так что после более чем 3 часов я наконец-то нашел свою ошибку: я использовал applicationContext для инициализации Switch, а тема приложения не инициализирована: она используется только для применения темы по умолчанию дляостальные мероприятия.Таким образом, обновление экземпляра Switch до чего-то подобного решает проблему:

val switch = Switch(this@MainActivity) //kotlin ref to my activity
...