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 :

Ajout d'un bouton sur une vue "Canvas"


Sujet :

Composants graphiques Android

  1. #1
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut Ajout d'un bouton sur une vue "Canvas"
    Bonjour.

    Je travaille actuellement sur une application sur laquelle j'ai créé une surclasse de View pour gérer des actions utilisateurs etc...
    Cette fonction surcharge la fonction onDraw pour les traitements.

    Je me contentais donc de faire un SetContentView(MaClasse) au niveau de mon activité. Maintenant j'aimerais ajouter une série de boutons en bas de mon écran lors d'une action utilisateur. J'ai commencé par les afficher "tout le temps", mais là c'est le drame, impossible de les positionner comme j'aimerais.

    J'ai créé une RelativeLayout dans laquelle je rajoute ma vue et mes boutons, mais je ne trouve pas le moyen de positionner ceux ci en bas de mon écran au dessus de ma vue dessinée en 2D. J'ai vu certains éléments qui semblent pouvoir le faire en passant par un layout XML (layout:align_...), mais si je créé une vue générique dans celui-ci je ne peux pas la "remplacer" par ma classe (je ne peux faire qu'un getViewById, et là je ne suis pas bien avancé).

    Donc le mieux que j'ai pu faire au final c'est ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    RelativeLayout container = new RelativeLayout(this);
     
            Button button = new Button(this);
            button.setText("TEST");
     
            Button button2 = new Button(this);
            button.setText("TEST2");
     
            container.addView(mavue);
            container.addView(button);
            container.addView(button2);
     
            setContentView(container);
    Mais donc les boutons sont en haut à gauche, et non pas du tout en bas...

    Une idée?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 182
    Points : 159
    Points
    159
    Par défaut
    Tu peux utiliser la méthode setGravity sous la forme

    relativelayout.setGravity(ALIGN_BOTTOM);

    Ca devrait marcher

  3. #3
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    Avait déjà essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    container.setGravity(RelativeLayout.ALIGN_BOTTOM);
    Ainsi que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    button.setGravity(RelativeLayout.ALIGN_BOTTOM);

    Ca ne fonctionne pas.
    D'autres pistes?

  4. #4
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    Je suis rassuré de voir que mon soucis n'a pas une réponse triviale.

    J'ai du mal à comprendre par contre pourquoi les graphismes n'ont pas été pensés comme Swing ou AWT pour Android. Les choix d'implémentation des layout me semble assez approximative non?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 60
    Points : 35
    Points
    35
    Par défaut
    Il faut ajouter les boutons directement dans le Layout :

    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
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    	<taViewPersonnalisée 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:id="@+id/MV"
        />
     
        <RelativeLayout
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:id="@+id/linearLayoutMenu"
        android:layout_below="@+id/MV">
     
        	<Button
        	android:layout_width="wrap_content" 
        	android:layout_height="wrap_content"
        	android:id="@+id/btn1"
        	android:text="@string/1">
        	</Button>
        	<Button
        	android:layout_width="fill_parent" 
        	android:layout_height="wrap_content"
        	android:id="@+id/btn2"
        	android:text="@string/2"
        	android:layout_below="@+id/btn1">
        	</Button>
        </RelativeLayout>
     
    </LinearLayout>

  6. #6
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    J'avais pensé à une méthode comme ça, mais comment je fais pour "remplacer" la vue MV par la mienne.

    Je ne peux faire qu'un searchById et après je ne peux pas modifier l'objet si?

  7. #7
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Citation Envoyé par Linio Voir le message
    J'avais pensé à une méthode comme ça, mais comment je fais pour "remplacer" la vue MV par la mienne.

    Je ne peux faire qu'un searchById et après je ne peux pas modifier l'objet si?
    l'identifiant MV te servira à retrouver l'objet dans ton activity
    NomdeTaClassView nomobjet = (NomdeTaClassView)findViewById(R.id.MV);


    Après pour le modifier il suffit juste de faire un invalidate sur l'objet

    C'est dans le OnDraw de ta ClassView que tu modifiera ton dessin

  8. #8
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    Bon, je prends un peu de temps pour tester...

    @Cuillere : Il n'est pas possible d'indiquer une vue personnalisée dans le layout, il fait une exception : ClassNotFound android.view.MaClasse

    @Feanorin : Même combat pour le cast : java.ClassCastException : android.view.View



    Pourtant la signature de ma classe est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class MaClasse extends View implements OnGestureListener, OnZoomListener {
     
    ...
     
    }

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    lors de la définition de ta vue canvas tu dois utiliser le constructeur avec trois paramètres (tu dois avoir AttributeSet)
    comme ça tu peux appeler la vue dans ton xml

  10. #10
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Tu as un exemple ici
    http://davy-leggieri.developpez.com/...tion-boussole/

    C'est possible de mettre ta ClassView dans le Layout

  11. #11
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    Merci pour ces précisions, j'ai enfin réussi à faire ce que je voulais.

    Pour info il semble que le constructeur appelé soit celui à 2 paramètres.

    Encore merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter un bouton sur une page d'un projet de macro complémentaire
    Par jpclabaux dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/11/2012, 20h41
  2. [FLEX] Ajouter un bouton sur une image
    Par miya dans le forum MXML
    Réponses: 2
    Dernier message: 02/03/2009, 17h29
  3. Réponses: 11
    Dernier message: 28/01/2006, 20h52

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