74

按下按钮时如何使用 xml 更改文本和背景颜色?

要更改文本颜色,我可以这样做:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="mycolor"/>
    <item android:color="mycolor2"/>
</selector>

要更改我可以做的背景(在具有可绘制参考的选择器/项目中使用它):

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FF0079FF" />
</shape>

但我怎么能两者兼得?假设我想要:

  • 默认值:黑色文本/白色背景
  • 按下:白色文字/蓝色背景

编辑:回答

我完全忘记了背景和文本颜色是分开管理的,所以我就是这样做的:

<Button
    android:textColor="@color/filtersbuttoncolors"
    android:background="@drawable/mybackgroundcolors" />

在 mybackgroundcolors.xml 我管理背景,在 filtersbuttoncolors.xml 我管理文本颜色。在两个 xml 文件中,我管理状态(按下、选中、默认)

4

7 回答 7

49

由于 API 级别 21,您可以使用:

android:backgroundTint="@android:color/white"

你只需要在你的xml中添加这个

于 2016-07-15T16:24:53.070 回答
46

这是一个可绘制的示例,默认情况下为白色,按下时为黑色:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <solid
                android:color="#1E669B"/>
            <stroke
                android:width="2dp"
                android:color="#1B5E91"/>
            <corners
                android:radius="6dp"/>
            <padding
                android:bottom="10dp"
                android:left="10dp"
                android:right="10dp"
                android:top="10dp"/>
        </shape>

    </item>
    <item>
        <shape>
            <gradient
                android:angle="270"
                android:endColor="#1E669B"
                android:startColor="#1E669B"/>
            <stroke
                android:width="4dp"
                android:color="#1B5E91"/>
            <corners
                android:radius="7dp"/>
            <padding
                android:bottom="10dp"
                android:left="10dp"
                android:right="10dp"
                android:top="10dp"/>
        </shape>
    </item>
</selector>
于 2013-10-16T10:15:35.720 回答
27

我认为这样做更简单:

button.setBackgroundColor(Color.BLACK);

你不需要import android.graphics.Color;import android.R.color;

或者您可以只编写 4 字节十六进制代码(不是 3 字节)0xFF000000,其中第一个字节设置 alpha。

于 2014-06-23T04:25:28.933 回答
21

只是补充@Jonsmoke 的回答。

对于 API 级别 21 及以上,您可以使用:

android:backgroundTint="@android:color/white"

在 XML 中用于按钮布局。

对于低于 21 的 API 级别,请使用AppCompatButton使用app命名空间而不是android作为backgroundTint

例如:

<android.support.v7.widget.AppCompatButton
    android:id="@+id/my_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="My Button"
    app:backgroundTint="@android:color/white" />
于 2018-06-16T00:41:13.693 回答
13

在styles.xml中添加以下行

<style name="AppTheme.Gray" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorButtonNormal">@color/colorGray</item>
    </style>

在按钮中,添加android:theme="@style/AppTheme.Gray",例如:

<Button
            android:theme="@style/AppTheme.Gray"
            android:textColor="@color/colorWhite"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@android:string/cancel"/>
于 2016-11-30T06:29:51.943 回答
4

创建应用程序时,将在 res/values 文件夹中创建一个名为 styles.xml 的文件。如果更改样式,则可以更改所有布局的背景、文本颜色等。这样您就不必进入每个单独的布局并手动更改它。

样式.xml:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Theme.AppBaseTheme" parent="@android:style/Theme.Light">
    <item name="android:editTextColor">#295055</item> 
    <item name="android:textColorPrimary">#295055</item>
    <item name="android:textColorSecondary">#295055</item>
    <item name="android:textColorTertiary">#295055</item>
    <item name="android:textColorPrimaryInverse">#295055</item>
    <item name="android:textColorSecondaryInverse">#295055</item>
    <item name="android:textColorTertiaryInverse">#295055</item>

     <item name="android:windowBackground">@drawable/custom_background</item>        
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

parent="@android:style/Theme.Light"是 Google 的原生颜色。以下是原生样式的参考: https ://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml

name="Theme.AppBaseTheme"意味着您正在创建一个继承所有样式的样式parent="@android:style/Theme.Light"。这部分你可以忽略,除非你想再次从 AppBaseTheme 继承。= <style name="AppTheme" parent="AppBaseTheme">

@drawable/custom_background 是我放在可绘制文件夹中的自定义图像。这是一个 300x300 的 png 图像。

#295055 是深蓝色。

我的代码更改了背景和文本颜色。对于 Button 文本,请查看 Google 的原生 stlyes(我在上面给你的链接)。

然后在 Android Manifest 中,记得包含代码:

<application
android:theme="@style/Theme.AppBaseTheme">
于 2014-02-24T09:46:32.857 回答
2

只需使用MaterialButtonapp:backgroundTintandandroid:textColor属性:

<MaterialButton
  app:backgroundTint="@color/my_color"
  android:textColor="@android:color/white"/>
于 2020-12-30T20:20:41.950 回答