Android 如何将样式应用于所有按钮,而不是图像按钮?

Android 如何将样式应用于所有按钮,而不是图像按钮?,android,android-layout,android-button,imagebutton,android-styles,Android,Android Layout,Android Button,Imagebutton,Android Styles,我需要为应用程序中的所有按钮应用背景色,因此我将其添加到styles.xml中 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- button styles --> <item name="colorButtonNormal">@color/button_color</item> <!-- below api 21 -->

我需要为应用程序中的所有按钮应用背景色,因此我将其添加到styles.xml中

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- button styles -->
    <item name="colorButtonNormal">@color/button_color</item> <!-- below api 21 -->
    <item name="android:colorButtonNormal">@color/button_color</item> <!-- above api 21 -->
    <item name="android:buttonStyle">@style/ButtonColor</item>
</style>

<style name="ButtonColor" parent="@style/Widget.AppCompat.Button">
    <item name="android:textColor">@color/font</item>
</style>

@颜色/按钮颜色
@颜色/按钮颜色
@样式/钮扣颜色
@颜色/字体
它工作得很好,当我在XML中添加一个按钮时,该按钮自动具有我在styles.XML中设置的颜色

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- button styles -->
    <item name="colorButtonNormal">@color/button_color</item> <!-- below api 21 -->
    <item name="android:colorButtonNormal">@color/button_color</item> <!-- above api 21 -->
    <item name="android:buttonStyle">@style/ButtonColor</item>
</style>

<style name="ButtonColor" parent="@style/Widget.AppCompat.Button">
    <item name="android:textColor">@color/font</item>
</style>

问题是,当我添加ImageButton时,ImageButton也会得到这些颜色,我不希望这样。问题特别在于
colorbutonnormal
,它也将背景色应用于ImageButton,我不希望这样。如何解决此问题?

应用程序主题中的attr定义了
ImageButton
(在您的情况下为
AppCompatImageButton
)使用的默认样式:

<item name="imageButtonStyle">@style/Widget.AppCompat.ImageButton</item>
比如:

<ImageButton  
     android:theme="@style/MyImageButtonTheme"/> 
  <style name="MyImageButtonTheme" parent="ThemeOverlay.AppCompat.Light"> 
      <item name="colorButtonNormal">@color/my_color</item> 
 </style>

可以通过为不同的视图应用不同的样式来实现

假设我有三种不同颜色组合的样式,我希望对所有大按钮应用bigButtonTheme样式

然后

我在所有大按钮
android:theme=“@style/bigButtonTheme”>

静止按钮或其他VEWI将保持不变。 您还可以通过将其定义为父主题来复制样式的其他属性,如全局主题字体背景色

<style name="ButtonColor" parent="@style/GlobelStyleOfApp"/>

有一个
小部件.Material.ImageButton
。您是否尝试过覆盖该属性并将其设置为android:imageButtonStyle?