J'ai appliqué une forme pour un bouton comme:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle" >
<gradient Android:startColor="#DD000000" Android:endColor="#DD2d2d2d" Android:angle="90"></gradient>
<corners Android:radius="15dip"></corners>
</shape>
Maintenant, je veux utiliser un sélecteur comme:
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/active"
Android:state_pressed="true" />
<item Android:drawable="@drawable/passive"/>
pour ce bouton également. C'est possible ...???
utilisez de cette façon:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true" >
<shape>.......</shape>
</item>
..........
..........
</selector>
Détaillé au point de réponse
Créer une ressource couleur dans
res/values / colours.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="yellow" type="color">#F7B500</item>
<item name="yellow_dark" type="color">#AC7E00</item>
<integer-array name="androidcolors">
<item>@color/yellow</item>
<item>@color/yellow_dark</item>
</integer-array>
</resources>
Créez un dessinable à
res/drawable/bg_yellow_round.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle" >
<solid Android:color="@color/yellow" />
<stroke
Android:width="2dp"
Android:color="@color/yellow" />
<corners
Android:bottomLeftRadius="20dp"
Android:bottomRightRadius="20dp"
Android:topLeftRadius="20dp"
Android:topRightRadius="20dp" />
</shape>
Créez un autre dessinable, vous voulez une transition au même endroit et nommez-le
res/drawable/bg_yellow_dark_round.xml
<solid Android:color="@color/yellow_dark" />
<stroke
Android:width="2dp"
Android:color="@color/yellow_dark" />
<corners
Android:bottomLeftRadius="20dp"
Android:bottomRightRadius="20dp"
Android:topLeftRadius="20dp"
Android:topRightRadius="20dp" />
Maintenant, créez un liste d'état des couleurs à
res/color/btn_selector_yellow.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:exitFadeDuration="@Android:integer/config_shortAnimTime">
<item Android:drawable="@color/yellow" Android:state_focused="true" Android:state_pressed="false"/>
<item Android:drawable="@drawable/bg_yellow_dark_round" Android:state_pressed="true"/>
<item Android:drawable="@drawable/bg_yellow_round"/>
</selector>
Maintenant, réglez-le sur votre bouton comme suit
<Button
Android:id="@+id/button1"
Android:layout_width="248dp"
Android:layout_height="44dp"
Android:layout_gravity="center_horizontal"
Android:layout_marginBottom="10dp"
Android:layout_marginTop="20dp"
Android:background="@color/btn_selector_yellow"
Android:text="AZ_ is so cool" />
Maintenant, cela fera la transition de
à
.
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>
Vous pouvez également créer une forme qui utilise un sélecteur à l'intérieur. Si votre forme change simplement de couleur dans différents états, c'est beaucoup plus propre.
color/color_selector.xml
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:color="@color/blue_dark" Android:state_pressed="true" />
<item Android:color="@color/blue_light" />
</selector>
drawable/shape.xml
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<solid Android:color="@color/color_selector" />
<corners Android:bottomLeftRadius="6dip" Android:bottomRightRadius="6dp" />
<padding Android:bottom="0dip" Android:left="0dip" Android:right="0dip" Android:top="0dip" />
</shape>
C'est ma voie, et ça marche!
<item Android:state_pressed="true">
<shape Android:shape="oval">
<gradient Android:centerX=".6"
Android:centerY=".40"
Android:endColor="@color/colorPrimary"
Android:gradientRadius="20"
Android:startColor="@color/colorPrimary"
Android:type="radial" />
<stroke Android:width="1dp"
Android:color="#FFFFFF" />
<size Android:width="55dp"
Android:height="55dp" />
</shape>
</item>
<item Android:state_focused="false">
<shape Android:shape="oval">
<gradient Android:centerX=".6"
Android:centerY=".40"
Android:endColor="@Android:color/transparent"
Android:gradientRadius="20"
Android:startColor="@Android:color/transparent"
Android:type="radial" />
<stroke Android:width="1dp"
Android:color="#FFFFFF" />
<size Android:width="55dp"
Android:height="55dp" />
</shape>
</item>
Pour être plus réutilisable, vous pouvez définir des états sur des propriétés uniques. Évitez de dupliquer vos formes
<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>
J'ai pu définir l'arrière-plan par programme une fois désactivé en utilisant cette méthode.
Mon exemple est un bouton circulaire avec state_pressed. ci-dessous:
<?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>
Eh bien, je sais qu'il est trop tard Mais voici un exemple résolu
<TextView
Android:id="@+id/txt_out_going_calls"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_margin="04dp"
Android:layout_weight="1"
Android:background="@drawable/header_text_view_selector"
Android:gravity="center"
Android:text="@string/outgoing_calls_tab_button_text"
Android:textColor="@color/home_text_color" />
et mon header_text_view_selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_selected="true">
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<solid Android:color="@color/home_fragment_tab_color_selected"/>
<corners Android:radius="25dip" />
<padding Android:bottom="08dip" Android:left="9dip" Android:right="9dip" Android:top="08dip" />
</shape>
</item>
<item Android:state_selected="false">
<shape>
<solid Android:color="@color/home_fragment_tab_color_simple"/>
<corners Android:radius="25dip" />
<padding Android:bottom="08dip" Android:left="9dip" Android:right="9dip" Android:top="08dip" />
</shape>
</item>
</selector>
Donc, fondamentalement, je crée un textview
arrondi avec sélecteur. Ici, je gère uniquement state_selected
et not_selected
. J'espère que ça aide
Utilisez votre nom de forme lorsque vous utilisez une image et utilisez-le comme vous utilisez l'image. Essayez, vous ne rencontrerez aucun problème. C'est bien ce que vous demandiez?