You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Kotlin修改按钮样式失效并报资源找不到错误求助

问题解决:动态切换Material按钮样式时出现Resources$NotFoundException

错误原因

setBackgroundResource()方法仅适用于加载Drawable类型资源(如shape、png、selector等),你传入的是Style资源ID,系统无法将Style识别为Drawable,因此抛出资源未找到异常。

解决方案

前提确认

确保布局中的按钮是com.google.android.material.button.MaterialButton(而非原生Button),否则MaterialComponents的样式无法正常生效。

方法一:使用MaterialButton专属API切换样式(推荐)

MaterialButton提供了setStyle()方法用于动态切换按钮样式,要求Material Components Library版本≥1.6.0或Android API≥31:

修改Fragment中的代码:

binding.btnWon.setOnClickListener {
    binding.btnFore.setStyle(R.style.borderlessButton, true)
    binding.btnWon.setStyle(R.style.borderButton, true)
}

binding.btnFore.setOnClickListener {
    binding.btnWon.setStyle(R.style.borderlessButton, true)
    binding.btnFore.setStyle(R.style.borderButton, true)
}

方法二:兼容低版本的替代方案

如果需要兼容更低版本,可以通过修改按钮的背景着色、边框属性来模拟样式切换:

  1. 在drawable目录下创建按钮边框的shape文件(命名为border_button.xml):
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke android:width="2dp" android:color="?attr/colorPrimary"/>
    <corners android:radius="4dp"/>
</shape>
  1. 在Kotlin代码中切换背景和文本样式:
binding.btnWon.setOnClickListener {
    // 设置无框样式
    binding.btnFore.background = null
    binding.btnFore.setTextAppearance(R.style.borderlessButton)
    // 设置有框样式
    binding.btnWon.background = ContextCompat.getDrawable(requireContext(), R.drawable.border_button)
    binding.btnWon.setTextAppearance(R.style.borderButton)
}

binding.btnFore.setOnClickListener {
    binding.btnWon.background = null
    binding.btnWon.setTextAppearance(R.style.borderlessButton)
    binding.btnFore.background = ContextCompat.getDrawable(requireContext(), R.drawable.border_button)
    binding.btnFore.setTextAppearance(R.style.borderButton)
}

额外注意事项

  • 确保themes.xml中的样式继承正确,borderButton和borderlessButton的父样式要对应MaterialButton的标准样式;
  • 若使用方法一,需确认项目依赖的Material Components Library版本足够高(在build.gradle中检查implementation 'com.google.android.material:material:1.6.0+')。

内容的提问来源于stack exchange,提问作者장인수

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 16:33:40