如何在Android Style中设置app:前缀的MaterialButton属性?
核心问题
你的Style没有继承MaterialButton的基础样式,导致Material组件的自定义属性(如cornerRadius、strokeColor)无法被系统识别解析。
解决方案
- 给Style指定MaterialButton的父样式
必须让你的Style继承Widget.MaterialComponents.Button(或其子样式),这样才能关联Material库的自定义属性集。 - 移除Style中属性的app:前缀
布局XML里的app:是命名空间前缀,在Style的<item>标签中直接使用属性名即可,无需前缀。
修改后的完整Style代码
<?xml version="1.0" encoding="utf-8"?> <resources> <item type="id" name="btn_xml" value="btn_xml" /> <style name="ProgrammaticallyStyle" parent="Widget.MaterialComponents.Button"> <item name="android:id">@id/btn_xml</item> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:layout_margin">5dp</item> <item name="android:backgroundTint">@color/red</item> <item name="android:paddingStart">30dp</item> <item name="android:paddingEnd">30dp</item> <item name="android:text">In XML</item> <item name="android:textStyle">bold</item> <item name="cornerRadius">25dp</item> <item name="strokeColor">@color/black</item> <item name="strokeWidth">2dp</item> </style> </resources>
补充说明
- 继承
Widget.MaterialComponents.Button后,Style会自动继承MaterialButton的所有默认样式和属性定义,确保自定义属性能被正确解析。 - 如果需要更细分的按钮样式(如轮廓按钮),可以继承对应的父样式,比如
Widget.MaterialComponents.Button.OutlinedButton。
内容的提问来源于stack exchange,提问作者Leonel Fusco
相关产品推荐
相关产品推荐

