android - Android:更改动态添加的开关颜色
问题描述
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 视图中得到的拇指)。
谢谢。
问候,路易斯
解决方案
好的,3个多小时后,我终于找到了我的错误:我正在使用applicationContext
来初始化Switch
应用程序的主题未初始化:它仅用于为其余活动应用默认主题。因此,将Switch
实例更新为这样的内容可以解决问题:
val switch = Switch(this@MainActivity) //kotlin ref to my activity
推荐阅读
- r - How to aggregate data reactively with shiny by the variables you selected from UI?
- java - Illegal character in path at index , Tomcat SSL connector path
- flutter - 参数类型'列表
'不能分配给参数类型'MaterialColor' - reactjs - 如何在 React js 中渲染和输出数据表
- sql-server - 链接服务器数据库仅由表和视图组成
- php - 从多行文本框中获取数据并利用提交的数据 PHP
- sql-server - 添加 NOT NULL 列而不使用 DEFAULT 但 WITH VALUES
- laravel - 如何比较动态网址?
- microsoft-graph-api - Microsoft Graph Booking Businesses DELETE 操作失败:404 Http 响应代码
- amazon-web-services - 无法从附加了 IAM 角色的 Windows Server 下载 CodeDeploy 代理