How to apply shape and selector simultaneously for Button?

后端 未结 9 2335
暗喜
暗喜 2020-12-07 15:27

I have applied a shape for a button like:





        
相关标签:
9条回答
  • 2020-12-07 16:13

    My example is a circle button with state_pressed. code bellow:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
    
        <item android:state_pressed="true">
            <shape android:shape="oval">
                <solid android:color="@color/light_primary_color" />
            </shape>
    
        </item>
        <item>
            <shape android:shape="oval">
                <solid android:color="@color/accent_color" />
            </shape>
        </item>
    
    </selector>
    
    0 讨论(0)
  • 2020-12-07 16:14

    shape.xml

    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <solid android:color="@color/star_off"/>
        <corners android:radius="5dp"/>
        <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
    </shape>
    

    selector.xml

    <selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_mediumAnimTime">
    
        <item android:drawable="@color/tab_focused" android:state_focused="true" android:state_pressed="false"/>
        <item android:drawable="@color/tab_pressed" android:state_pressed="true"/>
        <item android:drawable="@drawable/shape"/>
    
    </selector>
    
    0 讨论(0)
  • 2020-12-07 16:14

    To be more reusable, you can set states on single properties. Avoid duplicating your shapes

    <selector
        xmlns:android="http://schemas.android.com/apk/res/android"
    >
        <item>
            <shape android:shape="rectangle" >
                <corners android:radius="5dp"/>
                <solid
                    android:state_enabled="false"
                    android:color="@color/transparent"
                />
                <solid
                    android:state_enabled="true"
                    android:color="@color/background"
                />
                <stroke
                    android:width="@dimen/dividerHeight"
                    android:color="@color/dividerLight"
                />
            </shape>
        </item>
    </selector>
    

    I was able to set background programmatically once disabled using this method.

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