Android:更改按钮文字和背景颜色

loading...


58

使用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文件中我管理状态(按下,选中,默认)

6回答

  • 3

    这是一个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>
    

  • 22

    我认为这样做更简单:

    button.setBackgroundColor(Color.BLACK);
    

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

    或者你可以只写第一个字节设置alpha的4字节十六进制代码(不是3字节) 0xFF000000 .


  • 41

    从API级别21开始,您可以使用:

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

    你只需要在你的xml中添加它


  • 21

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

  • 12

    只是补充@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" />
    

  • 8

    创建应用程序时,将在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">
    

loading...

评论

暂时没有评论!