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 :

Liste recyclerview problème d'espacement entre les items


Sujet :

Composants graphiques Android

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Points : 49
    Points
    49
    Par défaut Liste recyclerview problème d'espacement entre les items
    Bonjour à tous,
    Je rencontre un problème avec la liste Recyclerview. Le soucis avec cette liste RecyclerView, c’est que chaque item tiens sur un écran, il y a un gros problème d'espacement.

    --Le résultat que je devrais obtenir est le suivant :
    Nom : resultat-cours-a-obtenir.PNG
Affichages : 1207
Taille : 27,5 Ko


    --Et moi j’obtiens ce résultat
    Nom : mon-resultat1.PNG
Affichages : 1378
Taille : 21,4 Ko
    Nom : mon-resultat2.PNG
Affichages : 1330
Taille : 18,3 Ko



    Voici le code de mon layout recyclerview
    Nom : layout-recyclerview.PNG
Affichages : 1381
Taille : 13,6 Ko

    Voici le code de ma vue item
    Nom : vue-item-recyclerview.PNG
Affichages : 1466
Taille : 17,9 Ko

    Voici le fichier manifest.xml qui déclare le thème de l’activité



    Voici le code java ou je récupère la liste recylcerview dans la classe MainActivity
    Nom : main-activity.PNG
Affichages : 1353
Taille : 12,1 Ko


    Voici l’implémentation de mon Adpatateur
    Nom : myadaptater.PNG
Affichages : 1355
Taille : 34,0 Ko


    Classe interne viewholder de mon adaptater
    Nom : myviewholder.PNG
Affichages : 1363
Taille : 19,5 Ko


    Je ne sais vraiment pas d'où vient ce problème d'affichage avec ce gros espacement entre les items, impossible de le réduire
    J’aurai besoin de votre aide, pour comprendre et résoudre ce problème. Je vous remercie déjà pour l’aide comme vous avez peu m’apporté dans ces différentes discussions que j’ai ouvert sur ce forum.
    Encore merci par avance pour cette nouvelle aide.

  2. #2
    Membre éclairé Avatar de alves1993
    Homme Profil pro
    Développeur Java/Dart/Javascript/Android (FullStack)
    Inscrit en
    Décembre 2012
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Java/Dart/Javascript/Android (FullStack)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 222
    Points : 659
    Points
    659
    Par défaut
    Le problème se trouve au niveau de la vue de l'item.
    Je te conseil de modifier la valeur android:layout_height de ton LinearLayout, de mettre plutôt wrap_content au lieux de match_parent
    Un geek ne vieillit pas, il se met à jour.

    Pour plus d'informations sur Android regarder la faq Android.
    Ensuite les tutoriels Android sont disponibles ici
    Pour les mecs, qui n'arrivent pas toujours à digérer le Javascript, Dart peut-être une solution pour vous.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Points : 49
    Points
    49
    Par défaut
    Bonjour Alves1993,

    Je te remercie pour ta réponse, j'ai tardé un peu à répondre, car je n'avais pas consulter ma boîte mail depuis quelques jours.

    En effet, on m'avait donné cette réponse sur un forum. Par contre lorsque dans le Linearlayout, on inclut un WebView. Android Studio n'autorise pas qu'on modifie la propriété layout_heigh en wrap_content. Ca donne ça :

    Nom : recyclerview-with-webview.PNG
Affichages : 1359
Taille : 11,9 Ko

    Le message d'erreur indiqué est le suivant :

    Placing a WebView in a parent element, that uses a wrap_content layout_height can lead to subtile bugs uses match_parent instead
    (here wrap_content may not work,well with the Webview bellow)
    The webview implemantation has certain performance optimisations which will not work if the view parent is using the wrap_content rather than match_content. That load to subtile UI bugs.


    En gros, Android Studio ne veut que le parent du WebView utilise la propriété wrap_content, car ça peut entraîner des bugs subtiles dans l'interface graphique.

    J'ai essayé d'encapsuler mon WebView dans un autre Linearlayout, il n'y a plus cette erreur, mais par contre il y a toujours un gros espacements entre les items.
    Du coup, Le layout Lenearlayout root à la propriété en wrap_content. Et le parent du WebView a la proppriété match_content sinon l'erreur réapparaît.

    Aurait-tu une solution pour réduire au maximum cette espacement ?

    Merci, par avance

    Bonne journée

  4. #4
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Bonsoir BOLARD,

    A l'avenir, merci de poster ton code directement sur la discussion. Ca sera plus facile à exploiter pour les gens qui veulent t'aider que des images. Tu peux le faire en cliquant sur le bouton # ce qui donnera l'affichage suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // Ici, du code peut être inséré
    Merci d'avance.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    Je répète mon problème, lorsque j'utilise une liste recyclerview, j'ai un espacement important entre les items. Je ne peux changer la propriété layout_height de mon linearlout du layout représent les items, parce que Android Studio ne me l'autorise pas, quand à l'intérieur du layout il y a un WebWiew.

    Il m'affiche le message d'erreur suivant :

    Placing a WebView in a parent element, that uses a wrap_content layout_height can lead to subtile bugs uses match_parent instead
    (here wrap_content may not work,well with the Webview bellow)
    The webview implemantation has certain performance optimisations which will not work if the view parent is using the wrap_content rather than match_content. That load to subtile UI bugs.


    Voici le code :

    Layout du recyclerview

    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
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    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.db.formation.android.v1.appafficharticles.MainActivity">
        <!--android:layout_alignParentTop="true">-->
    <android.support.v7.widget.RecyclerView
    android:id="@+id/rcvIdArticles"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="false"
    android:orientation="vertical"
    >
        </android.support.v7.widget.RecyclerView>
    </RelativeLayout>

    layout item. Encapsuler dans un linearlayout, contient TextView et un WebView.
    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"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/idLenearparentItem"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@drawable/background_click_item"
    >
        <TextView
    android:id="@+id/txtIdTitleArticle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="15dp"
    android:layout_marginBottom="15dp"
    android:text="toto"
    android:lines="1"
    android:ellipsize="end"
    android:textAppearance="?android:attr/textAppearanceLarge"
    />
        <WebView
    android:id="@+id/wvIdContentArticle"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="30dp"
    />
    </LinearLayout>

    Pour contourner le problème, j'ai créé un layout à part pour le WebView. De cette façon je peux modifier la valeur du layout_height en wrap_content dans la balise linearlayout du layout item.
    Cette solution réduit bien l'espacement entre les items.

    Est-ce que vous auriez une idée, en laissant le WebView dans le même linearlayout de départ.


    Merci par avance,

  6. #6
    Membre éclairé Avatar de alves1993
    Homme Profil pro
    Développeur Java/Dart/Javascript/Android (FullStack)
    Inscrit en
    Décembre 2012
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Java/Dart/Javascript/Android (FullStack)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 222
    Points : 659
    Points
    659
    Par défaut
    Il te suffit de mettre le WebView à l'intérieur d'un LinearLayout

    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"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:layout_marginTop="10dp"
                  android:layout_marginBottom="10dp">
     
     
     
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Je mange du riz à la sauce graine"
            android:textAlignment="center"
            android:layout_marginBottom="5dp"/>
     
        <LinearLayout
              android:layout_width="match_parent"
              android:layout_height="match_parent">
            <WebView
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
     
        </LinearLayout>
     
    </LinearLayout>
    Un geek ne vieillit pas, il se met à jour.

    Pour plus d'informations sur Android regarder la faq Android.
    Ensuite les tutoriels Android sont disponibles ici
    Pour les mecs, qui n'arrivent pas toujours à digérer le Javascript, Dart peut-être une solution pour vous.

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Points : 49
    Points
    49
    Par défaut
    Bonjour alves1993,

    Merci pour ta réponse pertinente.

    J’ai tenté d’appliquer ta solution avec mon Samsung Galaxy S3 (version Android 4.3), ça marche quand la liste se charge à l'écran

    Nom : 12-12-2016_Activity_afficher_articles_rss.png
Affichages : 1224
Taille : 19,3 Ko

    Par contre quand je fais un mouvement avec mon doigt vers le bas. L’espacement revient.

    Nom : 12-12-2016_Activity_afficher_articles_rss_bug.png
Affichages : 1235
Taille : 11,8 Ko


    J’ai testé avec ma Tablette Galaxy Tab 3 (version Android 4.4 Kitkat) est là ça fonctionne bien ainsi que par plusieurs émulateurs.

    Donc le problème c’est avec la version Android 4.3 Jelly Bean, quand on fait défiler les items de haut en bas, le problème d’espacement resurgit.

    Aurais-tu une solution pour définitivement résoudre ce bug, avec la version 4.3 d’Android, pour que la liste s’affiche normalement sur un Galaxy S3.
    Je te remercie pour les réponses que tu m’as apportées, elles m’ont beaucoup aidées.

    Merci par avance, pour tes nouvelles suggestions.

  8. #8
    Membre éclairé Avatar de alves1993
    Homme Profil pro
    Développeur Java/Dart/Javascript/Android (FullStack)
    Inscrit en
    Décembre 2012
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Java/Dart/Javascript/Android (FullStack)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 222
    Points : 659
    Points
    659
    Par défaut
    Je n'ai aucune solution pour le moment à ce problème.
    Mais je te conseille de jeter un coup d’œil sur la documentation Android.
    Tu peux avoir plus d'informations sur ses deux liens.
    1. https://developer.android.com/guide/...migrating.html
    2. https://developer.android.com/about/...html#Behaviors
    Un geek ne vieillit pas, il se met à jour.

    Pour plus d'informations sur Android regarder la faq Android.
    Ensuite les tutoriels Android sont disponibles ici
    Pour les mecs, qui n'arrivent pas toujours à digérer le Javascript, Dart peut-être une solution pour vous.

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Points : 49
    Points
    49
    Par défaut
    Merci pour ta réponse rapide, je vais jeter un coup d'œil à cette doc, et je tiens au courant, dès que j'ai du nouveau par rapport à ce problème.

  10. #10
    Membre du Club
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Points : 49
    Points
    49
    Par défaut
    Bonjour Alves1993,
    Les solutions que j'ai trouvé est d'utiliser une version antérieur de la librairie recyclerview
    compile 'com.android.support:recyclerview-v7:23.1.0'
    au lieu de
    compile 'com.android.support:recyclerview-v7:24.2.1'
    ou encore de sortir le WebView en créant un autre Layout pour cette View et le problème d'espacement est réglé.

    Merci encore pour ton aide et bonne année 2017.

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

Discussions similaires

  1. Espace entre les items
    Par Johngtrs dans le forum Android
    Réponses: 4
    Dernier message: 08/12/2011, 14h02
  2. Spool, problème d'espace entre les colonnes
    Par moumoutte32 dans le forum SQL
    Réponses: 15
    Dernier message: 13/10/2011, 12h21
  3. Espacement entre les items d'un menu
    Par Thrud dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 03/06/2008, 13h52
  4. Problème de menu: espaces entre les images
    Par nmathon dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 30/05/2006, 14h16
  5. [HTML & CSS] Problème d'espace entre les <li>
    Par Yoshidu62 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 17/05/2006, 18h53

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