CSmith 关于使用带有 parent="@android:style/Widget.Button" 的样式的答案的第一部分是更改按钮属性(如左对齐或右对齐文本)的最佳方法。然而,答案的其余部分描述了如何创建自己的选择器,所以我想我会添加我的解决方案以从默认按钮继承选择器,然后只覆盖你想要更改的特定选择器:
只需将 android:drawable="@android:drawable/btn_default" 用于您想要默认行为的那些选择器,然后您可以只为您想要更改的那些选择器指定自定义字段。在我尝试拥有一个继承所有选择器但通常具有透明背景而不是灰色背景的按钮的情况下,请执行以下操作(为了清楚起见,在此处复制 CSmith 答案的第一部分,感谢 CSmith!):
使用自定义样式定义按钮:
<Button id= ... style="@style/myButton" />
res/values/styles.xml:
<style name="myButton" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/myBackground</item>
...other changes to default button...
</style>
然后,继承所有选择器并覆盖显示灰色的选择器:在 res/drawable/myBackground.xml 中:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false"
android:drawable="@drawable/transparent_btn" />
<item android:state_pressed="true"
android:drawable="@android:drawable/btn_default" />
<item android:state_focused="true"
android:drawable="@android:drawable/btn_default" />
<item android:drawable="@drawable/transparent_btn" />
</selector>
并且,在 res/drawable/transparent_btn.xml 中:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@android:color/transparent" />
</shape>
注意:这个例子不担心 state_enabled,如果你想要一个按钮是否启用的特定行为,也只是覆盖那些选择器。