Standard Android Button with a different color

后端 未结 20 3248
误落风尘
误落风尘 2020-11-21 23:43

I\'d like to change the color of a standard Android button slightly in order to better match a client\'s branding.

The best way I\'ve found to do this so far is to c

相关标签:
20条回答
  • 2020-11-21 23:59

    There is a much easier way now : android-holo-colors.com

    It will let you change the colors of all holo drawables (buttons, spinners, ...) easily. You select the color and then download a zip file containing drawables for all resolutions.

    0 讨论(0)
  • 2020-11-22 00:00

    If you are making colour buttons with XML you can make the code a bit cleaner by specifying the focused and pressed state in a separate file and reuse them. My green button looks like this:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_focused="true" android:drawable="@drawable/button_focused"/>
        <item android:state_pressed="true" android:drawable="@drawable/button_pressed"/>
    
        <item>
            <shape>
                <gradient android:startColor="#ff00ff00" android:endColor="#bb00ff00" android:angle="270" />
                <stroke android:width="1dp" android:color="#bb00ff00" />
                <corners android:radius="3dp" />
                <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
            </shape>
        </item>
    
    </selector>
    
    0 讨论(0)
  • 2020-11-22 00:03

    I discovered that this can all be done in one file fairly easily. Put something like the following code in a file named custom_button.xml and then set background="@drawable/custom_button" in your button view:

    <?xml version="1.0" encoding="utf-8"?>
    <selector
        xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_pressed="true" >
            <shape>
                <gradient
                    android:startColor="@color/yellow1"
                    android:endColor="@color/yellow2"
                    android:angle="270" />
                <stroke
                    android:width="3dp"
                    android:color="@color/grey05" />
                <corners
                    android:radius="3dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
    
        <item android:state_focused="true" >
            <shape>
                <gradient
                    android:endColor="@color/orange4"
                    android:startColor="@color/orange5"
                    android:angle="270" />
                <stroke
                    android:width="3dp"
                    android:color="@color/grey05" />
                <corners
                    android:radius="3dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
    
        <item>        
            <shape>
                <gradient
                    android:endColor="@color/blue2"
                    android:startColor="@color/blue25"
                    android:angle="270" />
                <stroke
                    android:width="3dp"
                    android:color="@color/grey05" />
                <corners
                    android:radius="3dp" />
                <padding
                    android:left="10dp"
                    android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp" />
            </shape>
        </item>
    </selector>
    
    0 讨论(0)
  • 2020-11-22 00:03

    The DroidUX component library has a ColorButton widget whose color can be changed easily, both via xml definition and programmatically at run time, so you can even let the user to set the button's color/theme if your app allows it.

    0 讨论(0)
  • 2020-11-22 00:04

    values\styles.xml

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    
    <style name="RedAccentButton" parent="ThemeOverlay.AppCompat.Light">
        <item name="colorAccent">#ff0000</item>
    </style>
    

    then:

    <Button
        style="@style/Widget.AppCompat.Button.Colored"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="text" />
    
    <Button
        style="@style/Widget.AppCompat.Button.Colored"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:enabled="false"
        android:text="text" />
    
    <Button
        style="@style/Widget.AppCompat.Button.Colored"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="text"
        android:theme="@style/RedAccentButton" />
    
    <Button
        style="@style/Widget.AppCompat.Button.Colored"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:enabled="false"
        android:text="text"
        android:theme="@style/RedAccentButton" />
    

    0 讨论(0)
  • 2020-11-22 00:05

    You can now also use appcompat-v7's AppCompatButton with the backgroundTint attribute:

    <android.support.v7.widget.AppCompatButton
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:backgroundTint="#ffaa00"/>
    
    0 讨论(0)
提交回复
热议问题