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 :

Adapter et ListView


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
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 20
    Par défaut Adapter et ListView
    Bonjour,

    je tente désespérément de créer une ListView personnalisée qui reprend le principe d'une conversation (du type d'une application de sms : l'affichage peut être à droite ou à gauche).

    Ma vue qui doit se déplacer est un RelativeLayout, qui doit prendre 70% de la place de l'écran.
    J'ai donc créer un LinearLayout père qui contient mon RelativeLayout (avec un poid de 30) et un LinearLayout (avec un poid de 70 et qui ne sert à rien).
    Je pensais pouvoir inverser les deux layout fils en configurant la gravité du panel père à droite ou à gauche en fonction du besoin comme indiqué sur la doc :
    You can also specify gravity, which specifies the alignment of all the child elements
    Sauf que j'ai du mal comprendre car ça ne fonctionne pas...

    Auriez vous une idée pour que ça fonctionne tout en gardant mon ratio de 70% ? (J'aurais pu définir une taille fixe et ne pas mettre de second Layout (celui qui ne sert à rien) puis changer la gravité mais du coup, je perd le pourcentage )

    Voici le XML pour un élément de ma ListView :
    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
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:baselineAligned="false"
        android:orientation="horizontal"
        tools:ignore="UselessLeaf" >
     
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="3" >
     
            <TextView
                android:id="@+id/label"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_alignParentTop="true"
                android:singleLine="true"
                android:textSize="24sp" />
     
            <TextView
                android:id="@+id/dateCreation"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@id/label"
                android:layout_below="@id/label"
                android:singleLine="true" />
     
            <TextView
                android:id="@+id/montantTransaction"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_alignTop="@id/label"
                android:singleLine="true"
                android:textSize="24sp" />
        </RelativeLayout>
     
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#ff000000"
            android:layout_weight="7" />
     
    </LinearLayout>
    Rendu : Nom : f8b71afe5e.jpg
Affichages : 222
Taille : 8,2 Ko

    et le code de mon adapter :
    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
    package fr.binou.alphaloan.interfaces;
     
    import java.util.ArrayList;
     
    import android.content.Context;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    import fr.binou.alphaloan.R;
    import fr.binou.alphaloan.modeles.Nature;
    import fr.binou.alphaloan.modeles.Transaction;
     
    public class ListViewTransactions extends ArrayAdapter<Transaction>{
     
    	private LayoutInflater inflater;
     
    	public ListViewTransactions(Context context, ArrayList<Transaction> transactions){
    		super(context, R.layout.transaction_adapter, transactions);
    		inflater = LayoutInflater.from(context);
    	}
     
    	public View getView(int position, View convertView, ViewGroup parent){
    		LinearLayout layoutItem;
     
    		if(convertView ==null){
    			layoutItem = (LinearLayout) inflater.inflate(R.layout.transaction_adapter, parent, false);
    		}
    		else{
    			layoutItem = (LinearLayout) convertView;
    		}
     
    		TextView label = (TextView) layoutItem.findViewById(R.id.label);
    		TextView montant = (TextView) layoutItem.findViewById(R.id.montantTransaction);
    		TextView date = (TextView) layoutItem.findViewById(R.id.dateCreation);
     
    		Transaction transaction = getItem(position);
     
    		label.setText(transaction.getLabel());
    		montant.setText(String.valueOf(transaction.getMontant()));
    		date.setText(transaction.getReadableDateCreation());
     
    		if(transaction.getNature() == Nature.ENTRANT)
    			layoutItem.setGravity(Gravity.LEFT);
    		else
    			layoutItem.setGravity(Gravity.RIGHT);
     
    		return layoutItem;		
    	}
     
    }
    Et dernière petite question : Pourquoi dois-je mettre le poids à 30 si je veux que ce soit à 70% de la taille de l'écran ? ça ne devrait pas être l'inverse ? (70 pour 70 )

    Merci d'avance

    EDIT : Maj de mon code XML + ajout screenshot

  2. #2
    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éjà un RelativeLayout en "wrap_content" c'est une mauvaise idée. Ca marche assez mal.
    D'autant que là il n'est pas vraiment nécessaire.

    Pour le reste... le weight n'a rien à voir avec un pourcentage...
    L'attribution de l'espace commence à se faire par les views n'ayant PAS de weight. Disons 5 views, 3 avec un weight à 1,2 et 3 respectivement (et un total, disons, de 10), et 2 views en wrap_content (le contenu fait 60dp).
    Si la taille totale est de 300dp, on commence par les deux views à 60dp => 120dp utilisé => reste 180dp.
    Puis on divise par 10 (180dp / total_weight), et on attribue les tailles aux autres views: weight1 = 18dp, weight2=36dp, weight3=54dp.

    Voilà voila...

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 20
    Par défaut
    Merci pour ta réponse et tes conseils, mais j'ai encore soif de tes connaissances :
    J'ai changé la largeur de mon RelativeLayout en match_parent (je pensais que ce n'était pas compatible avec le poid).
    J'ai aussi modifié mes poids de 30 et 70 à 3 et 7 (C'est pas des pourcentages )

    Le truc, c'est que d'après ce que tu m'as expliqué, mon layout ayant un poids de 3 devrait prendre 3/10 de l'espace, or il en prend 7/10 tandis que mon layout ayant un poids de 7 prend 3/10 de l'espace

    Sinon une idée pour mon soucis à la base ? (prendre 70% de l'espace à droite ou à gauche en fonction d'un paramètre)

  4. #4
    Membre émérite
    Avatar de LeBzul
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 381
    Par défaut
    Salut,
    Si ca peut t'aider :
    "Vous vous demandez sûrement ce que l’on veut dire par le poids d’un élément. Prenons un exemple, imaginez que vous avez 2 boutons en colonne et que vous voulez que chacun occupe tout l’espace disponible.
    Si on leur affecte la même valeur au poids (android:layout_weight), l’espace libre sera partagé équitablement entre les deux. Si l’on met une valeur 1 au premier et 2 au second, le deuxième prendra deux fois plus d’espace libre que le premier (Par défaut la valeur du poids est de 0).
    Vous pouvez aussi utiliser des pourcentages, mais dans ce cas assurez vous bien que la somme des pourcentages ne dépasse pas 100%."

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 20
    Par défaut
    Je suis d'accord, mais dans mon cas, l'espace reservé est inversement proportionnel au poids... Aucune idée d'où ça peut venir...

    Sinon, personne n'a une idée pour mon soucis d'origine ? (prendre 70% de l'espace à droite ou à gauche en fonction d'un paramètre)

Discussions similaires

  1. Adaptation de ListView
    Par android84 dans le forum Composants graphiques
    Réponses: 11
    Dernier message: 25/01/2013, 10h58
  2. adapter une listview par widget ratingbar ?
    Par amirmejrii dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 10/02/2012, 21h58
  3. adapter dans listView
    Par anastunisie dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 16/05/2011, 09h02
  4. Réponses: 2
    Dernier message: 21/02/2011, 17h00
  5. Comment adapter un ListView en fonction de l'objet appelant ?
    Par Xxbz3 dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 18/12/2010, 16h42

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