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

Android Discussion :

Agencement des vues sur Android


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur web et mobile (PHP et Java principalement)
    Inscrit en
    Septembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web et mobile (PHP et Java principalement)
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2014
    Messages : 9
    Par défaut Agencement des vues sur Android
    Bonjour à tous,

    Je commence par préciser que j'ai appris sur le tas à développer pour Android, je n'ai jamais vraiment eu de cours ou suivi de tuto (pas complet en tout cas) sur le sujet donc il y a peut-être quelques lacunes dans mes connaissances.

    Donc voici mon problème:
    J'ai un souci pour ce qui concerne l'agencement de mes objets dans mes vues. J'aimerais avoir une vue qui se crée de manière dynamique en fonction du nombre d'objets à afficher. J'aimerais un affichage en grille (3 objets par ligne, autant de ligne que nécessaire).
    Pour ça j'ai essayé avec un TableLayout dans lequel j'intégrais un nouveau TableRow chaque "i % 3 = 0" (i étant le compteur de la boucle). Jusque là, aucun problème, ça marchait nickel.
    Là où ça posait problème c'est au niveau du rendu: sur certains appareils, on voyait bien la colonne du milieu, mais les 2 autres colonnes débordaient en partie de l'écran (affichées qu'à moitié par exemple). Je ne sais pas ce qui manquait, ce que j'ai oublié.

    Voici le code:
    fragment_offer.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
    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
     
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center">
     
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Panier"
                android:padding="20dp"
                android:layout_margin="10dp"
                android:background="@drawable/offer_background_list_element"
                android:layout_alignParentTop="true"
                android:layout_alignParentRight="true"
                android:id="@+id/offer_card_access_button"
                android:textColor="#ffffff"/>
     
            <package.utils.CustomTableLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/offer_main_customlayout"
                android:orientation="vertical"
                android:layout_below="@id/offer_card_access_button"
                android:layout_margin="5dp" />
        </RelativeLayout>
    </ScrollView>
    CustomTableLayout.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
    public class CustomTableLayout extends TableLayout {
     
        private TableRow.LayoutParams mTableRowLayoutParams;
        private LinearLayout.LayoutParams mImageLayoutParams;
        private TableRow mCurrentTableRow;
        private Context mContext;
     
        // Constructeurs qui appellent tous "init(Context)" en-dessous
     
        private void init(Context context) {
            mContext = context;
     
            mTableRowLayoutParams = new TableRow.LayoutParams(
                    TableRow.LayoutParams.MATCH_PARENT,
                    TableRow.LayoutParams.MATCH_PARENT);
            mTableRowLayoutParams.gravity = Gravity.CENTER_HORIZONTAL;
            mTableRowLayoutParams.bottomMargin = 20;
            mTableRowLayoutParams.topMargin = 20;
     
            mImageLayoutParams = new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    1f);
            mImageLayoutParams.gravity = Gravity.CENTER_HORIZONTAL;
        }
     
        // Méthode appelée par mon fragment pour ajouter de nouveaux objets à la vue
        public void addView(int resourceId, int position) {
            if (position % 3 == 0) {
                mCurrentTableRow = new TableRow(mContext);
                mCurrentTableRow.setGravity(Gravity.CENTER_HORIZONTAL);
                mCurrentTableRow.setLayoutParams(mTableRowLayoutParams);
                addView(mCurrentTableRow, mTableRowLayoutParams);
            }
     
            ImageView image = new ImageView(mContext);
            image.setLayoutParams(mImageLayoutParams);
            image.setImageDrawable(getResources().getDrawable(resourceId));
            image.setPadding(25, 0, 25, 0);
     
            mCurrentTableRow.addView(image, mTableRowLayoutParams);
        }
    }
    Dans ce cas-ci, je me contente d'afficher, je ne gère même pas encore les actions, etc, je voulais juste arriver à un affichage correct avant de passer à autre chose (d'ailleurs c'est toujours la même image qui est envoyée lol).

    À votre avis, qu'est-ce qui aurait pu manquer?
    Est-ce qu'Android ne retravaille pas automatiquement la taille des objets pour correspondre à l'écran?
    Encore une fois, c'était un TableLayout, avec un "match_parent" comme "layout_width". Y a-t-il mieux que le TableLayout dans ce cas-là?
    J'ai pensé à mettre, dans un fichier xml différent les différents éléments qu'il y a pour chaque objet, et à chaque fois rappeler ce fichier pour chacun des objets à afficher (donc à chaque addView, rappeler le fichier xml et lui donner des valeurs pour images, etc), mais toujours le même problème...


    Voilà mon souci, j'espère trouver de l'aide auprès de vous.

    Dans tous les cas, merci au moins de m'avoir lu ^^'

    Désolé du dérangement et merci d'avance!

    Ridounet

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur web et mobile (PHP et Java principalement)
    Inscrit en
    Septembre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web et mobile (PHP et Java principalement)
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2014
    Messages : 9
    Par défaut
    Il y a peut-être des attributs un peu inutiles, c'est qu'en testant j'ai essayé d'autres layout avant. Comme l'attribut "orientation" du TableLayout qui je pense n'est pas utile, eh bien c'est les restes du LinearLayout...

    Ridounet

  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
    D'autres répondront mieux que moi sans doute.

    Mais il me semble que le RelativeLayout pourrait être remplacé par un LinearLayout vertical non ?

    Pourquoi ne pas utiliser ListView ?

Discussions similaires

  1. affichage des vues sur netBeans
    Par polochonad dans le forum NetBeans
    Réponses: 11
    Dernier message: 19/03/2010, 09h41
  2. Faire des graphiques sur Android ?
    Par manu.dss dans le forum Android
    Réponses: 2
    Dernier message: 16/11/2009, 01h45
  3. gestion des vues sur les colonnes d'un formulaire
    Par johan971 dans le forum SharePoint
    Réponses: 5
    Dernier message: 17/04/2008, 15h15

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