Android:更改button文字和背景颜色

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

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

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

要改变背景我可以做(使用它在一个select器/项目与可绘制的参考):

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

但我怎么能做到这一点? 假设我想拥有:

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

编辑:答案

我总是忘了背景和文字颜色是分开pipe理的,所以我就是这样做的:

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

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

下面是一个drawable的例子,默认情况下是白色的,按下时是黑色的:

 <?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> 

我认为这样做很简单:

 button.setBackgroundColor(Color.BLACK); 

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

或者你可以只写4字节hex代码(不是3字节) 0xFF000000 ,其中第一个字节是设置阿尔法。

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

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

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

在styles.xml中添加下面的行

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

在button中添加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"/> 

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

styles.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"意味着你正在创build一个从parent="@android:style/Theme.Light"inheritance所有样式的样式。 这部分你可以忽略,除非你想从AppBaseTheme再次inheritance。 = <style name="AppTheme" parent="AppBaseTheme">

@ drawable / custom_background是一个自定义图像,我把它放在drawable的文件夹中。 这是一个300×300的PNG图像。

#295055是深蓝色的颜色。

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

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

 <application android:theme="@style/Theme.AppBaseTheme">