28 votes

Quel est l'état "state_focused" pour un bouton?

Je voudrais qu'un bouton garde un certain couleur d'arrière-plan après avoir été cliqué, et change de couleur à nouveau lorsque un autre bouton est pressé. Je pensais que c'était l'état "state_focused".

Mais les seuls deux états que j'ai pour mon bouton sont pressé ou non pressé.

Est-ce que je comprends correctement l'état "state_focused", ou mon StateListDrawable (voir ci-dessous) est-il incorrect ?

46voto

dmon Points 20795

state_focused est activé lorsque le bouton est en cours de sélection à l'aide d'une manette directionnelle ou d'une boule de commande. Les vues n'affichent généralement pas d'état de focus lorsqu'on les utilise avec le toucher.

36voto

ademar111190 Points 2855

Voici un exemple des états des boutons :

entrez la description de l'image ici

Source : http://developer.android.com/design/style/touch-feedback.html

19voto

Bourbon Points 502

https://developer.android.com/guide/topics/resources/drawable-resource.html

android:state_pressed
Boolean. "true" si cet élément doit être utilisé lorsque l'objet est pressé (comme lorsque un bouton est touché/cliqué); "false" si cet élément doit être utilisé dans l'état par défaut, non pressé.

android:state_focused
Boolean. "true" si cet élément doit être utilisé lorsque l'objet a le focus d'entrée (comme lorsque l'utilisateur sélectionne une entrée de texte); "false" si cet élément doit être utilisé dans l'état par défaut, non focusé.

android:state_hovered
Boolean. "true" si cet élément doit être utilisé lorsque l'objet est survolé par un curseur; "false" si cet élément doit être utilisé dans l'état par défaut, non survolé. Souvent, ce drawable peut être le même drawable utilisé pour l'état "focus".
Introduit dans la version API 14.

android:state_selected
Boolean. "true" si cet élément doit être utilisé lorsque l'objet est la sélection de l'utilisateur actuelle lors de la navigation avec une commande directionnelle (comme lors de la navigation dans une liste avec une manette directionnelle); "false" si cet élément doit être utilisé lorsque l'objet n'est pas sélectionné.
L'état sélectionné est utilisé lorsque le focus (android:state_focused) n'est pas suffisant (comme lorsque la vue de liste a le focus et qu'un élément à l'intérieur est sélectionné avec une manette directionnelle).

android:state_checkable
Boolean. "true" si cet élément doit être utilisé lorsque l'objet est vérifiable; "false" si cet élément doit être utilisé lorsque l'objet n'est pas vérifiable. (Utile uniquement si l'objet peut passer d'un widget vérifiable à un widget non vérifiable.)

android:state_checked
Boolean. "true" si cet élément doit être utilisé lorsque l'objet est coché; "false" s'il doit être utilisé lorsque l'objet n'est pas coché.

android:state_enabled
Boolean. "true" si cet élément doit être utilisé lorsque l'objet est activé (capable de recevoir des événements tactiles/clics); "false" s'il doit être utilisé lorsque l'objet est désactivé.

android:state_activated
Boolean. "true" si cet élément doit être utilisé lorsque l'objet est activé en tant que sélection persistante (comme pour "mettre en surbrillance" l'élément de liste précédemment sélectionné dans une vue de navigation persistante); "false" s'il doit être utilisé lorsque l'objet n'est pas activé.
Introduit dans la version API 11.

android:state_window_focused
Boolean. "true" si cet élément doit être utilisé lorsque la fenêtre de l'application a le focus (l'application est au premier plan), "false" s'il doit être utilisé lorsque la fenêtre de l'application n'a pas le focus (par exemple, si le volet de notification est descendu ou si une boîte de dialogue apparaît).

0voto

giulio Points 2846

Je sais qu'il est tard, de la doco

android:state_focused

Valeur d'état pour StateListDrawable, définie lorsque une vue a le focus d'entrée.

Peut être une valeur booléenne, telle que "true" ou "false".

D'après mes tests, le focus est lorsque l'utilisateur a navigué vers l'élément d'interface utilisateur en utilisant une interface utilisateur "suivant/précédent" comme sur un clavier virtuel, ou un dispositif de contrôle à distance (Android TV), ou lorsque l'utilisateur touche et maintient enfoncé un bouton sans le relâcher. J'ai dû utiliser state_pressed=true et state_focused=true pour présenter une image d'interface utilisateur appuyée longuement.

0voto

HumbleBee Points 418

Pour changer la couleur de fond d'un bouton et la rendre persistante après avoir été touchée, il suffit simplement de :

  1. Créer un fichier XML ColorStateSelector
  2. Définir la propriété "backgroundTint" du bouton sur le fichier XML mentionné ci-dessus
  3. Définir l'état du bouton sur celui désiré et défini dans le fichier ColorState

Par exemple en Kotlin et avec les Material Buttons :

Fichier ColorStateSelector (res/color/buttons_color_state.xml) :

XML de mise en page :

Fichier Kotlin :

val buttonOption = view?.findViewById(R.id.buttonOption)

// Implémentez ici toutes les vérifications "if" ou autres vérifications de contrôle si nécessaire
  buttonOption.isSelected = true
// maintenant le bouton est vert !

Bonne chance !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X