How to set button selection color along with rounded corners in android?

后端 未结 3 1212
无人及你
无人及你 2020-12-18 20:05

I want to set a rounded corner for a button in android along with changing the button color on when selected. I am doing the following things.

drawable/push_button.

相关标签:
3条回答
  • 2020-12-18 20:36

    I have found answer for my question with few trial & error attempts.

    Here is the solution.

    <?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="@color/green"/>
        <corners 
        android:radius="7dp"/>
        </shape>
     </item>
    
     <item android:state_focused="true" >
        <shape xmlns:android="http://schemas.android.com/apk/res/android" >
        <solid android:color="@color/green"/>
        <corners 
        android:radius="7dp"/>
        </shape>
     </item>
    
     <item android:state_focused="false" >
        <shape xmlns:android="http://schemas.android.com/apk/res/android" >
        <solid android:color="@color/red"/>
        <corners 
        android:radius="7dp"/>
        </shape>   
     </item>
    
     <item android:state_pressed="false" >
        <shape xmlns:android="http://schemas.android.com/apk/res/android" >
        <solid android:color="@color/red"/>
        <corners 
        android:radius="7dp"
        />
        </shape>
     </item> 
    
    </selector>
    
    0 讨论(0)
  • 2020-12-18 20:57

    What I did was defined the shape and specify the dp of each corner.

    <shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" android:padding="90dp">
    <solid android:color="#FFFFFF"/>
    <padding />
    <corners
        android:bottomRightRadius="15dp"
        android:bottomLeftRadius="15dp"
        android:topLeftRadius="15dp"
        android:topRightRadius="15dp"/>
    
    </shape>
    

    If you increase the dp in each corner it will make the button more rounded.

    0 讨论(0)
  • 2020-12-18 21:00

    I have been successful at doing exactly what you're describing. I did the following:

    First, I created a new class that extends Button. In this class, I created a method called setState():

    public void setState (int s)
    {
        if (s > 0 && s < 4 &&)
        {
            this.state = s;
            switch (state)
            {
                case 1:
                    setBackgroundDrawable (def_gray);
                    break;
    
                case 2:
                    setBackgroundDrawable (lt_gray);
                    break;
    
                case 3:
                    setBackgroundDrawable (black);
            }
        }
    }
    

    The three background drawables you see above are XML files describing the button look. They are mostly the same, but vary in the color set for each one. The default gray button is described like this:

    <?xml version="1.0" encoding="utf-8"?>
    
    <selector
        xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item>
    
            <shape>
    
                <gradient
                    android:startColor="#333333"
                    android:endColor="#333333" />
    
                <stroke
                    android:width="2dp"
                    android:color="@android:color/white" />
    
                <corners
                    android:radius="5dp" />
    
                <padding
                    android:left="2dp"
                    android:top="2dp"
                    android:right="2dp"
                    android:bottom="2dp" />
    
            </shape>
    
        </item>
    
    </selector>
    

    As far as I know, that XML format is expecting to be used to configure a color gradient on the button face. Since that wasn't what I wanted, I set both color values the same and the background color is consistent. You may need to experiment a bit with color values, but it looks like you've already got a handle on that.

    0 讨论(0)
提交回复
热议问题