如何在按下按钮时使用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文件中,我管理状态(按下,选中,默认)
答案 0 :(得分:41)
以下是一个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>
答案 1 :(得分:23)
我认为这样做更简单:
button.setBackgroundColor(Color.BLACK);
您需要import android.graphics.Color;
而不是:import android.R.color;
或者您可以编写4字节十六进制代码(不是3字节)0xFF000000
,其中第一个字节设置为alpha。
答案 2 :(得分:23)
从API级别21开始,您可以使用:
android:backgroundTint="@android:color/white"
你只需要在你的xml
中添加它答案 3 :(得分:12)
在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"/>
答案 4 :(得分:9)
只是补充@Jonsmoke的回答。
对于API级别21及以上,您可以使用:
android:backgroundTint="@android:color/white"
在XML中用于按钮布局。
对于低于21的API级别,使用 app 命名空间 AppCompatButton 而不是 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" />
答案 5 :(得分:3)
创建应用程序时,将在res / values文件夹中创建名为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"
表示您正在创建一个继承parent="@android:style/Theme.Light"
中所有样式的样式。
除非您想再次从AppBaseTheme继承,否则您可以忽略此部分。 = <style name="AppTheme" parent="AppBaseTheme">
@ drawable / custom_background是我放在drawable文件夹中的自定义图像。它是一个300x300 png的图像。
#295055是深蓝色。
我的代码会更改背景和文字颜色。对于Button文本,请查看Google的本地stlyes(我上面给出的链接)。
然后在Android Manifest中,记得包含代码:
<application
android:theme="@style/Theme.AppBaseTheme">
答案 6 :(得分:1)
只需使用 MaterialButton 和 app:backgroundTint 和 android:textColor 属性:
<MaterialButton
app:backgroundTint="@color/my_color"
android:textColor="@android:color/white"/>