<item> tag requires a 'drawable' attribute"-selector设置颜色不成功-解决方案

本文介绍了一种在Android中设置Button触摸变化背景颜色的方法,并针对出现的错误提供了修改方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:http://blog.youkuaiyun.com/sophiedjf/article/details/41512779


Android中Button控件实现触摸时背景颜色改变的效果,原实现方式如下:

Button中引用android:background="@drawable/button_background_selector"
在文件夹drawable下定义button_background_selector.xml文件,如下:

这种方法在运行时报错如下:
[java]  view plain  copy
  1. 05-06 18:14:42.730: E/AndroidRuntime(24114): Caused by: org.xmlpull.v1.XmlPullParserException: BinaryXML file line #4: tag requires a 'drawable' attribute or child tagdefining a drawable  
  2. 05-06 18:14:42.730: E/AndroidRuntime(24114): atandroid.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:178)  
  3. 05-06 18:14:42.730: E/AndroidRuntime(24114): atandroid.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:885)  
  4. 05-06 18:14:42.730: E/AndroidRuntime(24114): atandroid.graphics.drawable.Drawable.createFromXml(Drawable.java:822)  
  5. 05-06 18:14:42.730: E/AndroidRuntime(24114): atandroid.content.res.Resources.loadDrawable(Resources.java:2045)  
  6. 05-06 18:14:42.730: E/AndroidRuntime(24114): ... 31 more  

解决方法:
Button中引用background属性不变
更改button_background_selector.xml文件,如下:

并在colors.xml文件中增加如下定义:

<think>嗯,用户给了一个Maven的依赖列表,需要根据Java 17来修改这些依赖项。首先,我得检查每个依赖的兼容性,尤其是那些可能涉及版本冲突或已过时的库。 首先看Spring Boot的starter-web。用户可能使用的是Spring Boot的某个版本,但这里没有指定版本号。Java 17需要Spring Boot 3.x,比如3.0.0及以上。所以需要添加Spring Boot 3.x的parent或者指定版本号。比如用3.1.5,因为这是比较新的稳定版。 然后是x-easypdf 3.3.1。查一下这个库是否支持Java 17。可能需要确认官方文档或仓库,如果最新版本兼容,可能没问题。暂时假设没问题,但需要用户自己验证。 接下来是docx4j-core 11.4.9。Docx4j的版本11.x应该支持Java 17,但最好确认他们的官方支持情况。另外,Docx4j可能需要Jakarta XML Binding API,也就是jakarta.xml.bind-api,这里已经包含,但版本是4.0.2。JAXB Runtime是Glassfish的4.0.5,这应该是兼容的,因为Jakarta EE 9以后包名从javax换到jakarta,而Java 17移除了JAXB的默认实现,所以需要显式引入。 Saxon-HE 12.3作为XSLT处理器,应该支持Java 17。Saxon的HE版本是开源版,需要注意许可证问题,但功能上应该没问题。 Jakarta XML Bind API和JAXB Runtime的版本是否正确。用户已经用了jakarta.xml.bind-api 4.0.2和jaxb-runtime 4.0.5,这两个版本是匹配的,应该没问题。过有时候版本需要严格对应,比如API和Runtime的小版本是否一致。例如,4.0.2的API是否与4.0.5的Runtime兼容?可能需要检查两者的兼容性。通常,小版本差异可能可以兼容,但最好保持一致。比如将API升级到4.0.5,或者确认是否允许这样组合。 另外,Java 17中模块化系统可能影响某些库的反射访问,比如JAXB需要添加JVM参数或模块开放,但如果是Spring Boot项目,可能需要配置模块路径。过用户可能在用Spring Boot 3,它已经适配了Java 17的模块系统,所以可能需要额外配置。 可能的问题点:docx4j是否完全兼容Jakarta命名空间。Docx4j从某个版本开始支持Jakarta,比如11.x版本应该已经迁移了,因为JAXB在Java 11之后被移除,所以Docx4j需要依赖Jakarta的JAXB实现。用户已经包含了Jakarta的依赖,所以应该没问题。 总结需要修改的地方: 1. 添加Spring Boot 3.x的版本管理,比如在parent或properties中指定版本。 2. 确认各个依赖的版本是否兼容Java 17,尤其是docx4j和x-easypdf。 3. 确保JAXB相关依赖版本一致,比如将jakarta.xml.bind-api升级到4.0.5以匹配jaxb-runtime的4.0.5。</think>根据Java 17的要求,建议对依赖项做以下调整(主要涉及JAXB依赖的版本统一和Spring Boot版本升级): ```xml <dependencies> <!-- Spring Boot Starter Web需使用3.x版本(兼容Java17) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>3.1.5</version> <!-- 新增版本号 --> </dependency> <!-- x-easypdf保持原版本(确认支持Java17) --> <dependency> <groupId>org.dromara</groupId> <artifactId>x-easypdf</artifactId> <version>3.3.1</version> </dependency> <!-- Word处理库升级到最新稳定版 --> <dependency> <groupId>org.docx4j</groupId> <artifactId>docx4j-core</artifactId> <version>11.4.10</version> <!-- 升级小版本 --> </dependency> <!-- JAXB相关依赖版本统一 --> <dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> <version>4.0.2</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>4.0.5</version> <scope>runtime</scope> </dependency> <!-- Saxon升级到最新版 --> <dependency> <groupId>net.sf.saxon</groupId> <artifactId>Saxon-HE</artifactId> <version>12.4</version> <!-- 支持JDK17 --> </dependency> </dependencies> <!-- 建议添加Spring Boot父POM管理版本 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> ``` 关键调整说明: 1. **Spring Boot升级到3.x** Spring Boot 3.x是首个正式支持Java 17的版本(最低要求Java 17),原依赖未指定版本号时需显式声明 2. **JAXB依赖调整** Java 17移除了JAXB的默认实现,需显式声明: - 使用`jakarta.xml.bind-api`替代旧的`javax.xml.bind` - `jaxb-runtime`版本与API版本保持同步 3. **Saxon升级** Saxon-HE 12.4修复了多个JDK17兼容性问题,推荐使用最新版 4. **Docx4j小版本升级** 11.4.10版本包含JDK17下的稳定性改进 验证注意事项: ```bash mvn clean compile # 编译时关注annotation processing警告 mvn dependency:tree # 检查依赖冲突 ``` 如果使用模块化项目(module-info.java),需要添加: ```java requires java.xml.bind; requires jakarta.xml.bind; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值