我想在这个答案的开头说我不完全理解按钮栏是什么。除了为它们定义一些样式属性之外,Android开发人员文档似乎没有提及它们,因此我不确定它们如何映射到实际的视图/小部件。
我相信发生的事情是您忽略了风格和主题之间的区别。样式应用于视图以定义其属性。主题应用于整个应用程序或单个活动,并提供为应用该主题的应用程序/活动中显示的视图定义默认样式的能力(除其他外)。
但更重要的是,Activity 仅使用诸如buttonBarStyle 和buttonBarButtonStyle 之类的属性来解析按钮栏和按钮栏中按钮的默认样式。因为这些属性仅由活动解析,所以如果直接应用于视图,它们将被忽略。
因此,如果您想使用主题来应用样式,则需要创建一个新的样式定义来扩展所需的基本样式,然后将该自定义样式分配回主题定义中相应的视图样式属性。
<style name="CustomButtonStyle" parent="@android:attr/buttonStyle">
<item name="android:textColor">#ffffff</item>
</style>
<style name="AppTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
<item name="buttonStyle">@style/CustomButtonStyle</item>
</style>
<application
...
android:theme="@style/AppTheme" >
所有没有显式样式属性的按钮现在都将显示为白色文本。
但是,对于想要显示具有 ButtonBar 样式的按钮的特殊情况,您应该注意 ButtonBar 样式不会自动应用于您的按钮。您必须手动定义要与该样式一起显示的按钮。因此,上面的示例现在看起来更像这样:
<style name="CustomButtonBarStyle" parent="@android:attr/buttonBarStyle">
<item name="android:textColor">#ffffff</item>
</style>
<style name="AppTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
<item name="buttonBarStyle">@style/CustomButtonBarStyle</item>
</style>
<application
...
android:theme="@style/AppTheme" >
现在应用您为当前主题定义的 ButtonBar 样式:
<Button
...
style="?android:attr/buttonBarStyle"/>
请注意,这将应用为当前主题定义的 ButtonBar 样式(除非它被 Activity 覆盖,否则它将在整个应用程序中保持不变)。另请注意,由于您引用为当前主题定义的样式,因此它允许您根据所需的资源限定符以不同的方式定义当前主题,而无需更改布局代码。