Il s'agit d'un sélecteur de bouton tel que, lorsqu'il est normal, il apparaît en rouge, il est gris lorsqu'il est enfoncé.
Je voudrais demander comment le code pourrait-il être modifié directement de manière à ce que, une fois pressé, la taille et la couleur du texte puissent également changer? Merci beaucoup!
<item Android:state_pressed="true" >
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<stroke Android:width="2dp" Android:color="@color/black" />
<solid Android:color="@color/grey"/>
<padding Android:left="5dp" Android:top="2dp"
Android:right="5dp" Android:bottom="2dp" />
<corners Android:radius="5dp" />
</shape>
</item>
<item>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<stroke Android:width="2dp" Android:color="@color/black" />
<solid Android:color="#FF6699"/>
<padding Android:left="5dp" Android:top="2dp"
Android:right="5dp" Android:bottom="2dp" />
<corners Android:radius="5dp" />
</shape>
</item>
Il vous suffit de définir selector
of button
dans votre fichier de présentation.
<Button
Android:id="@+id/button1"
Android:background="@drawable/selector_xml_name"
Android:layout_width="200dp"
Android:layout_height="126dp"
Android:text="Hello" />
et fait.
Modifier
Voici le fichier button_effect.xml
dans le répertoire drawable
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/numpad_button_bg_selected" Android:state_selected="true"></item>
<item Android:drawable="@drawable/numpad_button_bg_pressed" Android:state_pressed="true"></item>
<item Android:drawable="@drawable/numpad_button_bg_normal"></item>
</selector>
En cela, vous pouvez voir qu'il y a 3 tirables, il vous suffit de placer ce style button_effect
dans votre button
, comme je l'ai écrit ci-dessus. Il vous suffit de remplacer selector_xml_name
par button_effect
.
Vous ne pouvez pas changer la taille du texte avec une liste d’états dessinable . Pour changer la couleur et la taille du texte, procédez comme suit:
Couleur du texte
Pour changer la couleur du texte, vous pouvez créer la liste d'état de couleur ressource . Ce sera une ressource séparée située dans le répertoire res/color/
. Dans layout xml, vous devez le définir comme valeur pour l'attribut Android:textColor
. Le sélecteur de couleur contiendra alors quelque chose comme ceci:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true" Android:color="@color/text_pressed" />
<item Android:color="@color/text_normal" />
</selector>
Taille du texte
Vous ne pouvez pas changer la taille du texte simplement avec des ressources. Il n'y a pas de "sélecteur de dimen". Vous devez le faire dans le code. Et il n'y a pas de solution simple.
La solution la plus simple consiste probablement à utiliser View.onTouchListener()
et à gérer les événements ascendants et descendants en conséquence. Utilisez quelque chose comme ceci:
view.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// change text size to the "pressed value"
return true;
case MotionEvent.ACTION_UP:
// change text size to the "normal value"
return true;
default:
return false;
}
}
});
Une solution différente pourrait être d'étendre la vue et de remplacer la méthode setPressed(Boolean)
. La méthode est appelée en interne lorsque le changement d'état pressé a lieu. Puis changez la taille du texte en conséquence dans l'appel de méthode (n'oubliez pas d'appeler le super).
Créer custom_selector.xml dans un dossier pouvant être dessiné
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/unselected" Android:state_pressed="true" />
<item Android:drawable="@drawable/selected" />
</selector>
Créer une forme selected.xml dans un dossier pouvant être dessiné
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle" Android:padding="90dp">
<solid Android:color="@color/selected"/>
<padding />
<stroke Android:color="#000" Android:width="1dp"/>
<corners Android:bottomRightRadius="15dp" Android:bottomLeftRadius="15dp" Android:topLeftRadius="15dp" Android:topRightRadius="15dp"/>
</shape>
Créer une forme non sélectionnée.xml dans un dossier pouvant être dessiné
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle" Android:padding="90dp">
<solid Android:color="@color/unselected"/>
<padding />
<stroke Android:color="#000" Android:width="1dp"/>
<corners Android:bottomRightRadius="15dp" Android:bottomLeftRadius="15dp" Android:topLeftRadius="15dp" Android:topRightRadius="15dp"/>
</shape>
Ajouter les couleurs suivantes pour l'état sélectionné/non sélectionné dans le dossier color.xml du dossier de valeurs
<color name="selected">#a8cf45</color>
<color name="unselected">#ff8cae3b</color>
vous pouvez vérifier la solution complète de ici
Le meilleur moyen d'implémenter le sélecteur est d'utiliser le XML au lieu d'utiliser la méthode de programmation comme plus facile à implémenter avec XML.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/button_bg_selected" Android:state_selected="true"></item>
<item Android:drawable="@drawable/button_bg_pressed" Android:state_pressed="true"></item>
<item Android:drawable="@drawable/button_bg_normal"></item>
</selector>
Pour plus d'informations, j'ai utilisé ce lien http://www.blazin.in/2016/03/how-to-use-selectors-for-botton.html
Dans le fichier Layout .xml
<Button
Android:id="@+id/button1"
Android:background="@drawable/btn_selector"
Android:layout_width="100dp"
Android:layout_height="50dp"
Android:text="press" />
btn_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<item Android:drawable="@drawable/btn_bg_selected" Android:state_selected="true"></item>
<item Android:drawable="@drawable/btn_bg_pressed" Android:state_pressed="true"></item>
<item Android:drawable="@drawable/btn_bg_normal"></item>
Vous pouvez utiliser ce code:
<Button
Android:id="@+id/img_sublist_carat"
Android:layout_width="70dp"
Android:layout_height="68dp"
Android:layout_centerVertical="true"
Android:layout_marginLeft="625dp"
Android:contentDescription=""
Android:background="@drawable/img_sublist_carat_selector"
Android:visibility="visible" />
(Fichier de sélecteur) Img_sublist_carat_selector.xml:
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_focused="true"
Android:state_pressed="true"
Android:drawable="@drawable/img_sublist_carat_highlight" />
<item Android:state_pressed="true"
Android:drawable="@drawable/img_sublist_carat_highlight" />
<item Android:drawable="@drawable/img_sublist_carat_normal" />
</selector>