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