<已解决>使用selector设置Button按下松开的样式以及 <item> tag requires a 'drawable' attribute or child tag defining a ...

本文介绍了一种解决按钮在按下和释放状态时背景颜色切换问题的方法,并提供了有效的XML配置示例。

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

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/flatui_clouds" android:state_pressed="true" />
    <item android:color="@color/flatui_peter_river" />
</selector>

在Drawable/中定义了一个selector来进行按钮按下和松开的背景色变换,可是在运行时报错 <item> tag requires a 'drawable' attribute or child tag defining a drawable

 

解决方案:

把 android:background = "@drawable/button_anim" 改为 android:drawable= "@drawable/button_anim"

_______________________________________

 更新: 无卵用

 

17:51更新

 

 

Why not simply use "drawable="@color/your_color" directly in your selector items instead? You don't need to define any shapes or any other files whatsoever, just have your color definitions in values/colors.xml (it's always good not to hardcode colors). –  javaxian Apr 13 '14 at 13:37 

 

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/flatui_midnight_blue" android:state_pressed="true" />
    <item android:drawable="@color/flatui_concrete" />
</selector>

 

转载于:https://www.cnblogs.com/hitnoah/p/4698528.html

在现代的 Web 框架中,例如 Vue.js,`:deep()` 是一个伪类选择器,用于穿透 CSS 模块化作用域(scoped styles),从而允许样式影响到子组件中的元素。然而,在某些版本更新后,`CSS` 选择器的语法进行了调整,导致旧的 `:deep <inner-selector>` 的写法被标记为弃用。 ### 弃用原因 框架工具链(如 Vue.js 或其构建工具 Vite)对 CSS 预处理器或 PostCSS 插件的更新引入了更严格的语法规范。为了保持一致性并避免歧义,新规范要求使用函数式语法 `:deep(<inner-selector>)` 来包裹内部选择器 [^1]。 ### 修复方法 将旧语法 `:deep <inner-selector>` 转换为新的 `:deep(<inner-selector>)` 格式。这适用于任何使用了 `:deep` 并且作为组合器(combinator)的情况。 #### 示例:Vue.js 中的转换 **旧语法(已弃用):** ```vue <style scoped> .parent :deep .child { color: red; } </style> ``` **新语法(推荐):** ```vue <style scoped> .parent :deep(.child) { color: red; } </style> ``` 在此示例中,`.parent` 是当前组件的类名,而 `.child` 属于子组件的元素。通过使用 `:deep(.child)`,样式可以正确穿透作用域并应用到子组件上 [^1]。 ### 具体代码转换案例 以下是一个完整的例子,展示了如何迁移不同情况下的 `:deep` 使用方式: #### 多级嵌套 **旧语法:** ```vue <style scoped> .container :deep .level-one :deep .level-two { font-size: 16px; } </style> ``` **新语法:** ```vue <style scoped> .container :deep(.level-one) :deep(.level-two) { font-size: 16px; } </style> ``` #### 结合其他 CSS 伪类 **旧语法:** ```vue <style scoped> :host ::v-deep .custom-class { background-color: blue; } </style> ``` **新语法:** ```vue <style scoped> :host :deep(.custom-class) { background-color: blue; } </style> ``` ### 工具支持 - **自动修复:** 如果项目使用了构建工具如 Vite 或 Vue CLI,可以通过升级插件版本和启用 ESLint 的相关规则来自动检测并提示 `:deep` 的弃用问题。 - **静态分析:** 可以利用 CSS Linter 工具扫描所有 `.vue` 文件,查找不符合新规范的 `:deep` 写法,并进行批量替换。 ### 注意事项 - 确保在修改完成后运行本地开发服务器测试样式是否仍然按预期工作。 - 在大型项目中,建议逐步迁移而非一次性全局替换,以便跟踪潜在的问题区域 [^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值