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 :

Manipuler les layouts


Sujet :

Composants graphiques Android

  1. #1
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Points : 646
    Points
    646
    Par défaut Manipuler les layouts
    Bonjour,

    Je suis récent sur JAVA ET Android et peut-être que je me pose des questions que les habitués trouveront bête.
    En tout cas créer la GUI n'est pas aussi simple que j'espérai, j'ai une une expérience bien plus agréable avec QtCreator et VC6
    J'imagine qu'il va me falloir plus de pratique pour maîtriser cette GUI. Est-ce que ce système est proche d'une bib JAVA qui serait plus documentée pour la pratique ? Tout ce que j'ai trouvé se cantonne à la théorie des layout.

    J'ai fait ce petit exemple ou je calcule le produit de deux entiers entrés par l'utilisateur.
    Je n'ai pas réussi à faire en sorte que la croix affichée remplisse la view , il s'agit bien des flags gravity::fill_vertical|fill_horizontal non ?
    Pour le résultat même problème du coup j'ai fixé la taille de la police.
    Qqun saurait me dire pourquoi ces flags ne marchent pas ?

    Merci.


    Uploaded with ImageShack.us

    Sinon voilà mon layout 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
    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
    <?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"
        >
    <TextView  
        android:layout_height="wrap_content" 
        android:text="@string/hello" android:layout_width="fill_parent" 
        android:minHeight="30sp" 
        android:gravity="fill_vertical|fill_horizontal"/>
    <LinearLayout android:id="@+id/LinearLayout01" 
    				android:layout_height="wrap_content" android:layout_width="fill_parent">
    	<EditText android:text="" 
    				android:id="@+id/LeftOrepand" 
    				android:layout_width="fill_parent" 
    				android:layout_height="fill_parent" 
    				android:lines="1" 
    				android:layout_weight="1" android:inputType="number"></EditText>
    	<TextView android:text="@string/szMultiply" 
    				android:id="@+id/szMultiply" 
    				android:layout_height="fill_parent" 
    				android:layout_width="fill_parent" 
    				android:layout_weight="1" 
    				android:gravity="center_vertical|center_horizontal"></TextView>		
    	<EditText android:text="" 
    				android:id="@+id/RightOrepand" 
    				android:layout_height="fill_parent" 
    				android:layout_width="fill_parent" 
    				android:ellipsize="end" 
    				android:lines="1"
    				android:layout_weight="1" android:inputType="number"></EditText>			
    </LinearLayout>
     
    <LinearLayout android:id="@+id/LinearLayout02" 
    			android:layout_width="fill_parent" 
    			android:layout_height="wrap_content">
    		<Button android:text="@string/ButResult" 
    			android:id="@+id/ButResult" 
    			android:layout_width="fill_parent" 
    			android:layout_height="wrap_content" 
    			android:fitsSystemWindows="true"></Button>
    </LinearLayout>
     
    <LinearLayout android:id="@+id/LinearLayout02" 
    			android:layout_width="fill_parent" 
    			android:layout_height="fill_parent">
    		<TextView android:text="Waiting" 
    			android:id="@+id/TxtResult" 
    			android:layout_width="fill_parent" 
    			android:layout_height="fill_parent" 
    			android:includeFontPadding="true" 
    			android:lines="1" 
    			android:textSize="50sp"
    			android:gravity="center_vertical|center_horizontal"></TextView>
    </LinearLayout>			
     
     
    </LinearLayout>

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par bizulk Voir le message
    En tout cas créer la GUI n'est pas aussi simple que j'espérai, j'ai une une expérience bien plus agréable avec QtCreator et VC6
    VC6 t'y va fort.. quoi que
    En tous cas, je suis dans le même cas, mais ça rentre petit à petit.

    Est-ce que ce système est proche d'une bib JAVA qui serait plus documentée pour la pratique ? Tout ce que j'ai trouvé se cantonne à la théorie des layout.
    Je crois que c'est proche de swing. Pour les layout, c'est similaire à ceux de Qt, mais en diférent.
    Le problème c'est que l'éditeur de layout, n'est pas aussi pratique que cela et qu'il y as pour chaque view une quantité impressionnante de propriété


    Je n'ai pas réussi à faire en sorte que la croix affichée remplisse la view , il s'agit bien des flags gravity::fill_vertical|fill_horizontal non ?
    Normalement c'est par rapport au layout parent. Ta croix c'est du texte?


    Pour le résultat même problème du coup j'ai fixé la taille de la police.
    C'est pas au layout de définir la taille du text.

    Sinon, pour donner une taille il semble que le dip est bien mieux que le pixel.

  3. #3
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 68
    Points : 59
    Points
    59
    Par défaut
    je pense qu'il vaut mieux utiliser une image pour représenter le croix, mieux d'utiliser un EditText.

    Comme ça tu pourras utiliser fill_vertical|fill_horizontal.

  4. #4
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Points : 646
    Points
    646
    Par défaut
    je pense qu'il vaut mieux utiliser une image pour représenter le croix, mieux d'utiliser un EditText.

    Comme ça tu pourras utiliser fill_vertical|fill_horizontal.
    En fait ces deux propriétés existent pour l'EDitText, mais elle ne fonctionnent pas (version de SDK ?)
    Ca serait réservé aux images ?

    Le problème c'est que l'éditeur de layout, n'est pas aussi pratique que cela et qu'il y as pour chaque view une quantité impressionnante de propriété
    Oui l'éditeur de layout est très faible mais ce qui m'énerve le plus c'est de ne pouvoir placer les view ou je souhaite à la souris. Après un certains temps on retourne toujours dans le code xml pour essayer d'arranger les choses.

    J'ai essayé de trouver des Editeurs tierce mais .. bof :
    droiddraw est très proche de l'éditeur de google, un peu trop je trouve car on retrouve les mêmes difficultés. Essayez de mettre deux boutons dans un linearLayout puis d'éditer celui-ci pour changer son orientation.
    intéressant mais c'est du toujours du texte.
    Et puis ces applications là pour moi peuvent perdre certaines des possibilités du layout.

    Est-ce que l'on ne pourrait pas craquer l'iPhone interface Builder pour générer du code xml android ?


    Je crois que pour l'instant la seule option sera s'armer de patience jusqu'à avoir un éditeur correct, et se faire UI progressivement plus complexe pour maitriser le bousin.

    ++

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    je pense que je ne vais pas trop dire de bêtises sinon n'hésitez pas à me lincher

    dans un système de layout comme je l'ai compris pour android ou comme Qt que je connais bien, la view(widget) peut être décomposée en deux partie :
    • sa zone occupée
    • son affichage dans cette zone

    Les layouts ne servent qu'à la première partie. Ni plus ni moins.
    Donc si tu utilise par exemple fill_parent sur les propriétés "layout width" et "layout height", la zone prend bien le maximum de place mais ce n'est pas pour autant que le texte s'agrandi.


    Citation Envoyé par bizulk Voir le message
    En fait ces deux propriétés existent pour l'EDitText, mais elle ne fonctionnent pas (version de SDK ?)
    Pour fill_vertical|fill_horizontal, regarde bien la doc
    FILL_HORIZONTAL Grow the horizontal size of the object if needed so it completely fills its container.
    int FILL_VERTICAL Grow the vertical size of the object if needed so it completely fills its container.
    Il n'y as donc aucune obligation sur l'affichage de la vue à prendre toute la place.

    Pour une image, il faut normalement spécifier le type de scale à fitXY non?

  6. #6
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Points : 646
    Points
    646
    Par défaut
    Donc si tu utilise par exemple fill_parent sur les propriétés "layout width" et "layout height", la zone prend bien le maximum de place mais ce n'est pas pour autant que le texte s'agrandi.
    Oui mais ce n'est pas ces propriétés qui sont concernées moi c'est c'est de la propriété gravity dont je parle.


    FILL_HORIZONTAL Grow the horizontal size of the object if needed so it completely fills its container.
    int FILL_VERTICAL Grow the vertical size of the object if needed so it completely fills its container.
    Il n'y as donc aucune obligation sur l'affichage de la vue à prendre toute la place.
    C'est ce que je trouve intéressant ... Le texte n'est pas affiché en sa vue car "il n'y a pas besoin", et on s'en rend compte parce que justement ce n'est pas affiché plein écran
    Mais alors pourquoi j'ai perdu mon temps à écrire cette ligne

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par bizulk Voir le message
    Le texte n'est pas affiché en sa vue car "il n'y a pas besoin", et on s'en rend compte parce que justement ce n'est pas affiché plein écran
    Je dirais que c'est plutôt le fonctionnement du TextView qui ne correspond pas à ce que tu veux.

    Tu peut le comprendre comme cela pour un TextView :
    • le gravity correspond à la grandeur de la zone de texte affiché dans la zone de la vue
    • dans cette zone de texte il affiche ton texte


    A ma connaissance c'est la définition du fonctionnement d'un textview dans une lib d'IHM. Si tu veux une comparaison avec Qt (vue que tu connait QtCreator), ça correspondrais à un QTextEdit en mode read-only.

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Pour que le text prenne le maximum de place, je pense qu'il faudra le faire toi même.
    Surement en utilisant un Paint et un Canvas
    http://developer.android.com/referen...ics/Paint.html
    http://developer.android.com/referen...cs/Canvas.html

  9. #9
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Points : 646
    Points
    646
    Par défaut
    Citation Envoyé par yan Voir le message
    Je dirais que c'est plutôt le fonctionnement du TextView qui ne correspond pas à ce que tu veux.

    Tu peut le comprendre comme cela pour un TextView :
    • le gravity correspond à la grandeur de la zone de texte affiché dans la zone de la vue
    • dans cette zone de texte il affiche ton texte


    A ma connaissance c'est la définition du fonctionnement d'un textview dans une lib d'IHM. Si tu veux une comparaison avec Qt (vue que tu connait QtCreator), ça correspondrais à un QTextEdit en mode read-only.
    C'est bien ainsi que je voyais la propriété gravity, et justement je ne comprends pourquoi en fixant cette propriété à fill_xxx je ne voyais pas le texte.
    Qu'on se comprenne bien :
    _ Depuis le début je fais le distingo entre layout_width/height et gravity
    _ yann me rappelle qu'il y a une condition pour que ces paramètres soient appliquées

    gravity attribute

    Et moi je me demande justement ce que 'if needed' veut dire : est-ce que ce n'est pas justement dans le cas ou la zone de dessin du texte est plus petit que la zone de la vue, auquel cas il recalcule la taille de la police pour compléter la vue ?

    On dirait que non mais je ne vois pas quoi d'autre alors.

Discussions similaires

  1. [MFC] ça existe les layout ?
    Par bigboomshakala dans le forum MFC
    Réponses: 32
    Dernier message: 09/06/2006, 15h47
  2. manipuler les favoris
    Par olivierx dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 24/10/2005, 17h04
  3. Réponses: 3
    Dernier message: 13/10/2004, 10h43
  4. Manipuler les fenêtre d'un shell en c
    Par Gential dans le forum C
    Réponses: 2
    Dernier message: 24/10/2003, 09h04
  5. [VB6]manipuler les semaines en VB ?
    Par kamadji dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 02/05/2003, 12h33

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