更改Android按钮上的背景颜色

时间:2019-01-08 13:07:06

标签: android android-studio themes background-color android-button

我希望按钮具有我指定的颜色,但否则外观和行为仍与标准按钮类似。因此我搜索并找到了this。我按照那里给出的建议进行操作,但是背景颜色保持标准灰色。知道我哪里出错了吗?

在我的styles.xml中,输入以下内容:

<style name="AppTheme.Button" parent="Widget.AppCompat.Button.Borderless.Colored">
<item name="android:colorButtonNormal">@color/colorButtonDark</item>
<item name="android:textColor">@color/colorAccent</item>
</style>

我的颜色是这些

<resources>
[...]
<color name="colorAccent">#ffffff</color>
<color name="colorButtonDark">#300a03</color>
</resources>

一个示例Button看起来像这样:

<Button
        android:text="exampleButton"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:id="@+id/button7" android:layout_marginTop="8dp"
        app:layout_constraintTop_toTopOf="@+id/guideline19" android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent" 
        app:layout_constraintStart_toStartOf="@+id/guideline"
        android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginEnd="8dp" android:theme="@style/AppTheme.Button"/>

2 个答案:

答案 0 :(得分:0)

尝试在XML中使用android.support.v7.widget.AppCompatButton而不是Button

<android.support.v7.widget.AppCompatButton
    android:text="exampleButton"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:id="@+id/button7" android:layout_marginTop="8dp"
    app:layout_constraintTop_toTopOf="@+id/guideline19" 
    android:layout_marginBottom="8dp"
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintStart_toStartOf="@+id/guideline"
    android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent"
    android:layout_marginEnd="8dp" android:theme="@style/AppTheme.Button"/>

答案 1 :(得分:0)

代替

android:theme="@style/AppTheme.Button"

使用

android:style="@style/AppTheme.Button"

EDIT1:

  

主题与风格

     

那么到底有什么区别呢?好吧,他们俩   以完全相同的方式声明(您已经知道),   区别在于使用方式。

     

主题旨在成为您应用程序样式的全球来源。的   新功能并没有改变它,只是允许您对其进行调整   每次观看。

     

样式应在视图级别应用。在内部,当你   在视图上设置样式,LayoutInflater将读取样式并应用   将其添加到AttributeSet之前的任何显式属性(这使您可以   覆盖视图上的样式值。

     

属性集中的值可以引用“视图”主题中的值。

     

TL; DR:主题是全局的,样式是局部的。

https://chris.banes.me/2014/11/12/theme-vs-style/