Android:更改动态添加的开关的颜色

Android:更改动态添加的开关的颜色,android,android-theme,Android,Android Theme,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.catalogI

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>

@颜色/原色
@颜色/原色暗
@颜色/原色
@彩色/彩色白色
@颜色/原色
不幸的是,我仍然在运行时得到错误的颜色。而不是蓝色。我的拇指是绿色的:

很明显,我完全没有抓住要点……我进行了几次搜索,人们建议使用SwitchCompat而不是Switch。我试过这样做,但我也肯定错过了一些东西,因为我最终用了非常小的大写字母来填充文本(而不是用Switch视图获得的拇指)

谢谢

问候,,
Luis

好的,3个多小时后,我终于找到了我的错误:我使用
applicationContext
初始化
开关,而应用程序的主题没有初始化:它只用于为其余活动应用默认主题。因此,将
开关
实例化更新为类似以下内容可以解决问题:

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

正如我所说的,我的开关是以编程方式生成的。用switchcompat替换交换机不会显示任何内容…这个问题的答案不止一个,其中一些人正在使用交换机。是的,你是对的…有一个解决交换机问题的方法…但我发现了我的错误。。。