IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

Style de boutons avec verrouillage (latch)


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 52
    Par défaut Style de boutons avec verrouillage (latch)
    Bonjour
    J'ai simplifié mon problème au maximum puisque je ne réussis toujours pas à faire fonctionner ce simple bouton avec l'affichage de ses 3 états qu'il devrait me donner.

    J'ai tenté plusieurs exemples de plusieurs sites et le dernier est: http://developer.android.com/guide/t...ls/button.html.

    Malgré que je tente de suivre (à la lettre) leurs cheminements, l'affichage de mon arrière-plan du bouton pressed s'affiche comme focused
    et de plus, il ne verrouille pas sur la valeur Pressed mais retourne plutôt à sa valeur par Défaut.

    J'ai intégré une variable update dont j'affiche en haut son état pour vérifier l'état du bouton et il verrouille pourtant bien.

    - L'état du bouton qui est affiché sont l'état normal (le bouton est désélectionné ou pas encore pesé).
    - Pendant tout le temps que je clique sur le bouton, c'est l'arrière-plan Pressed qui s'affiche au lieu de Focused.
    - Et finalement, lorsque je relâche le bouton, il retourne à l'arrière-plan par Défaut au lieu d'afficher Pressed.

    J'ai tenté de modifier l'ordre dans mon fichier style sans succès.
    Plusieurs des autres exemples utilisent les flags Android:state_enabled ou Android:state_window_focused mais le résultat est toujours le même.

    Je ne trouve pas cette solution même aussi simple que possible...
    Un petit coup de main serait apprécié.


    Voici les 4 états possibles de mes boutons:
    Nom : Capture.JPG
Affichages : 505
Taille : 19,3 Ko

    et finalement les 5 états que j'obtiens lorsque je clique sur le fameux bouton: Avant, Cliqué et Relâché, Cliqué et Relâché.

    Ce que j'ai compris de tous les exemples c'est que le mode Cliqué devrait me donner l'image Focused
    et que le mode Relaché devait me donner l'image Pressed ce qui n'est pas le cas.

    Pourtant, mon code réussit à verrouiller la variable.
    Ce type de programmation est aussi supporté depuis l'API 14.
    Nom : Capture3.jpg
Affichages : 500
Taille : 36,2 Ko


    Voici mon fichier MainActivity.java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    package com.mario.stylebouton;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
     
    public class MainActivity extends Activity {
     
    	Button button_send;
    	private TextView textViewResult;		// Texte explicatif de la valeur choisie
    	private boolean update = false;
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
     
    		//Affichage de la valeur par défaut de la sélection Accueil
    		textViewResult = (TextView) findViewById(R.id.textView1);
    		textViewResult.setText(R.string.bouton_normal);
     
    		button_send = (Button) findViewById(R.id.button_send);
    		button_send.setOnClickListener(new View.OnClickListener() {
            	public void onClick(View v) {
            		clickBouton("1");
            	}
            });
    	}
     
    	//Méthode qui est exécutée lorsque l'on clique sur un bouton
        public void clickBouton(String str) {
            if(update){
                    update = false;	//Toggle du bouton
                    textViewResult.setText(R.string.bouton_normal);
            }else{
            		update = true;	//Toggle du bouton
            		textViewResult.setText(R.string.bouton_pressed);
            }
        }
     
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		// Inflate the menu; this adds items to the action bar if it is present.
    		getMenuInflater().inflate(R.menu.main, menu);
    		return true;
    	}
     
    	@Override
    	public boolean onOptionsItemSelected(MenuItem item) {
    		// Handle action bar item clicks here. The action bar will
    		// automatically handle clicks on the Home/Up button, so long
    		// as you specify a parent activity in AndroidManifest.xml.
    		int id = item.getItemId();
    		if (id == R.id.action_settings) {
    			return true;
    		}
    		return super.onOptionsItemSelected(item);
    	}
    }
    Voici mon fichier activity_main.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.mario.stylebouton.MainActivity" >
     
        <Button
            android:id="@+id/button_send"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:onClick="sendMessage"
            android:background="@drawable/btn_custom"
            android:gravity="fill_horizontal|center" />
     
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="30dp"
            android:text="@string/bouton_normal"
            android:textColor="@color/rouge" />
     
    </RelativeLayout>
    Voici mon fichier btn_custom.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
            <item android:drawable="@drawable/button_focused"
              android:state_focused="true" />
        <item android:drawable="@drawable/button_pressed"
              android:state_pressed="true" />
        <item android:drawable="@drawable/button_default" />
    </selector>
    Voici mon fichier strings.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
     
        <string name="app_name">StyleBouton V1.0</string>
        <string name="bouton_normal">Bouton en état NORMAL (Défaut)</string>
        <string name="bouton_pressed">Bouton en état ACTIF (Pressed)</string>
        <string name="bouton_focused">Bouton en état Focussed</string>
        <string name="txt_bouton">Bouton</string>
     
        <string name="action_settings">Préférences</string>
     
    </resources>
    Et finalement mon fichier AndroidManifest.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.mario.stylebouton"
        android:versionCode="1"
        android:versionName="1.0" >
     
        <uses-sdk
            android:minSdkVersion="14"
            android:targetSdkVersion="15" />
     
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
     
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
     
    </manifest>
    Merci pour l'aide.

  2. #2
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 52
    Par défaut Focused lorsque je pèse sur la touche TAB de l'ADT
    Je me suis aperçu que lorsque j'utilise ce programme sur mon ADT, l'état Focused devient actif lorsque je pèse sur la touche TABULATION.

    Est-ce que ma version de API (15 pour une version 4.03) ne supporte pas cette fonction?

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    L'état "Focus" sert à quelques views, en particulier d'édition de texte (c'est la view "focused" qui recevra les touches tapées dans le clavier virtuel).
    Mais à part ça, un bouton ne demande jamais le state "focused". Par contre on peut y arriver avec les téléphones à "molette" (la molette permettant de passer d'une view à une autre).

    Dans ton selector:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
            <item android:drawable="@drawable/button_focused"
              android:state_focused="true" />
        <item android:drawable="@drawable/button_pressed"
              android:state_pressed="true" />
        <item android:drawable="@drawable/button_default" />
    Tu dis:
    Si le state est "focus" => button_focused
    SINON si le state est "pressed" => button_pressed
    SINON => button_default

    le state "pressed" n'étant atteint que quand le doigt est sur le bouton, il me semble que le comportement est bon...

    il n'y a pas de state "clicked".

  4. #4
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 52
    Par défaut
    Merci pour ta réponse nicorman.

    Les explications du web montrent pourtant qu'il est possible d'avoir ces 3 états.
    J'ai vraiment essayé plusieurs exemples et tutoriels sur les styles de boutons mais je me trouve chaque fois avec le même résultat.
    J'ai même essayé certains exemples très bien expliqués et reproduits tel quel comme compilé par l'auteur.
    Exemple 1: http://www.mkyong.com/android/androi...ector-example/

    Exemple 2: http://www.androidcookbook.com/Recip...?recipeId=3307

    Exemple 3: http://avianey.blogspot.ca/2009/11/c...and-theme.html
    et bien d'autres que je n'afficherai pas...

    Comme tu le vois sur chacun de leur site, ils parlent bien de 3 états obtenus (et même 4 pour certains qui considèrent aussi l'état OFF)

    Les 3 états qu'ils obtiennent sont:
    1- Mode Normal (Tout va bien madame la marquise, on attend une action...)
    2- Mode Focused (Oupss, quelqu'un me pèse dessus...)
    3- Mode Pressed (Bon, je suis en action, alors je reste allumé pour qu'on le voit bien)

    Tous les exemples sans exception disent la même chose ou presque (avec quelques variations).

    Tous les exemples que j'ai essayé me donnent les mêmes résultats:
    - Mode Normal (en attente)
    - Mode Pressed (Pendant l'action où je pèse sur le bouton mais qui devrait plutôt être le mode Focused qui s'affiche)
    - Mode Normal (Quand je relâche le bouton alors que ça devrait être le mode Pressed qui est affiché)

    Je suis rendu à me dire que c'est mon compilateur (Eclipse) qui fait défaut en quelque part puisque si cela fonctionne pour tous les experts,
    alors pourquoi une copie exacte ne fonctionne pas sur ma machine?
    Au début, je croyais que la version de l'API était en cause mais le premier exemple que je t'ai référencé utilise un API 10 alors...

    Ce soir, j'essai de compiler quelques exemples avec Android Studio64 pour me contenter.

    Pourrais-je te demander d'essayer mon programme ou un des trois exemple?
    Cela renforcerait soit ma conviction ou celle des autres.

  5. #5
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 52
    Par défaut
    Je viens de compiler avec la dernière version d'Android Studio 64 bits.
    J'ai le même résultat.

    Voici les 3 états qui sont normalement attendus par les exemples trouvés:
    1- Mode Normal (Tout va bien madame la marquise, on attend une action...)
    2- Mode Focused (Oupss, quelqu'un me pèse dessus...)
    3- Mode Pressed (Bon, je suis en action, alors je reste allumé pour qu'on le voit bien)

    et voici ce que j'ai plutôt:
    1- Mode Normal (Tout va bien madame la marquise, on attend une action...)
    2- J'ai le mode Pressed au lieu du Mode Focused (Oupss, quelqu'un me pèse dessus...)
    3- Retour au mode mode Normal au lieu du Mode Pressed (Bon, je suis en action, alors je reste allumé pour qu'on le voit bien)


    Donc, le compilateur n'est pas en faute.
    Mais je ne sais plus où chercher...

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Non mais ce que je disais c'est le comportement normal d'un bouton.

    Par défaut, il n'a pas de "state", disons en mode "normal"
    Quand on appuie dessus (touch), il passe en state "pressed"
    Quand on relâche, il repasse en mode "normal", et éventuellement génère un "onClick"

    Si tu veux que le bouton *reste* enfoncé... alors il faut se diriger vers les CheckBox.


    Si tu regardes la documentation: http://developer.android.com/guide/t...ls/button.html

    Il est bien marqué:
    The second <item>(state_focused) defines the bitmap to use when the button is focused (when the button is highlighted using the trackball or directional pad).
    (ou avec tab dans l'émulateur).

    Voilà la liste des "states" possibles:
    http://developer.android.com/guide/t...html#StateList

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/01/2011, 15h44
  2. Bouton avec menu style Windows (Bouton Demarrer) ?
    Par troxsa dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 02/12/2010, 13h37
  3. [AC-2003] Bouton avec style enfoncé
    Par moilou2 dans le forum IHM
    Réponses: 1
    Dernier message: 09/07/2009, 13h11
  4. problème changement de style de bouton avec I.E
    Par jounax dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 09/07/2008, 23h04
  5. [DOM] Ajouter un bouton avec un nouveau style
    Par Mehdi Feki dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/12/2005, 08h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo