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 :

Problème Drawer Layout


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Par défaut Problème Drawer Layout
    Salut à tous,

    Je n'ai pas l'habitude de poster sur les forums, mais je suis confronté à un gros problème sur l'un de mes projets.

    Pour les besoins de l'appli j'ai du créer un Drawer Layout personnalisé, la personnalisation demandé par le graphiste était tellement pointilleux que je n'ai pas pu utiliser de NavigationView. J'ai donc simplement utiliser une ListView avec un ArrayAdapter personnaliser.

    Jusqu'ici rien de sorcier, tout marche à merveille. Cependant j'ai un énorme problème quand je passe en mode paysage. Si j'ouvre mon drawerlayout, et que je scroll mon menu jusqu'en bas, toutes ma personnalisation graphique du DrawerLayout s'inverse. Je me retrouve avec des icônes la ou il devrait pas y en avoir, des tailles de textes inversé et j'en passe. Cela ce produit uniquement sous deux conditions: Que je sois en mode paysage, et que je scroll mon menu jusqu'au bout.

    Honnêtement je n'ai pas la moindre idée de ce qui peu provoqué ça, je suis tout simplement coincée. Je vous laisse des image ainsi qu'une partie du code.

    Merci d'avance de votre aide

    DRAWER LAYOUT PORTRAIT:
    Nom : Screenshot_20170417-201028.jpg
Affichages : 223
Taille : 253,2 Ko

    DRAWER LAYOUT PAYSAGE
    Nom : Screenshot_20170417-201035.jpg
Affichages : 222
Taille : 219,2 Ko

    DRAWER LAYOUT PAYSAGE APRES AVOIR COMPLETEMENT SCROLLE (Géneration du bug)
    Nom : Screenshot_20170417-201054.jpg
Affichages : 203
Taille : 227,3 Ko

    Récupération et création de mon DrawerLayout
    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
     
        @Override
        protected void onPostCreate(Bundle savedInstanceState) {
            super.onPostCreate(savedInstanceState);
     
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            getSupportActionBar().setDisplayShowTitleEnabled(false);
            getSupportActionBar().setIcon(R.mipmap.ic_header);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
     
            drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
            navigationView = (ListView) findViewById(R.id.nav_view);
            String[] listDrawer = getResources().getStringArray(R.array.item_drawer);
     
            DrawerAdapter adapter = new DrawerAdapter(this,listDrawer);
            navigationView.setAdapter(adapter);
     
            toggle = new ActionBarDrawerToggle(this, drawerLayout,toolbar, android.R.string.yes, android.R.string.no);
     
            toggle.syncState();
        }
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    public class DrawerAdapter extends BaseAdapter {
     
        //ListItem
        private String[] listItem;
     
        //Le contexte dans lequel est présent notre adapter
        private Context mContext;
     
        //Un mécanisme pour gérer l'affichage graphique depuis un layout XML
        private LayoutInflater mInflater;
     
     
        public DrawerAdapter(Context context, String[] aListP) {
            mContext = context;
            listItem = aListP;
            mInflater = LayoutInflater.from(mContext);
        }
     
        public int getCount() {
            return listItem.length;
        }
     
        public Object getItem(int position) {
            return listItem[position];
        }
     
        public long getItemId(int position) {
            return position;
        }
     
     
        public View getView(int position, View convertView, ViewGroup parent) {
            LinearLayout layoutItem;
     
            //(1) : Réutilisation des layouts
            if (convertView == null) {
                //Initialisation de notre item à partir du  layout XML "personne_layout.xml"
                layoutItem = (LinearLayout) mInflater.inflate(R.layout.item_drawer, parent, false);
            }
            else {
                layoutItem = (LinearLayout) convertView;
            }
     
            ImageView image = (ImageView) layoutItem.findViewById(R.id.icon_drawer);
            TextView text = (TextView) layoutItem.findViewById(R.id.text_drawer);
     
            //INSERTION DES VALEURS
            text.setText(listItem[position]);
     
            //COULEUR DU TEXT
            text.setTextColor(Color.WHITE);
     
            //POUR LES TITRES
            if(position == 0 || position == 5){
                layoutItem.setBackgroundColor(ContextCompat.getColor(mContext,R.color.blue1));
                text.setTextSize(23);
                text.setPadding(10,5,5,5);
            }
            //POUR LE A PROPOS
            else if(position == 2){
                layoutItem.setBackgroundColor(ContextCompat.getColor(mContext,R.color.red1));
            }
     
            else if(position%2 == 0){
                layoutItem.setBackgroundColor(ContextCompat.getColor(mContext,R.color.blue2));
            }
            else{
                layoutItem.setBackgroundColor(ContextCompat.getColor(mContext,R.color.blue3));
            }
     
            //METTRE LES ICONS
            setIcon(position,image);
     
            //On retourne l'item créé.
            return layoutItem;
        }
     
     
        public void setIcon(int position,ImageView image){
            if(position == 1){
                image.setImageResource(R.mipmap.ico_home);
            }
            else if(position == 2){
                image.setImageResource(R.mipmap.ico_question);
            }
            else if(position == 3){
                image.setImageResource(R.mipmap.ico_a_propos);
            }
            else if(position == 4){
                image.setImageResource(R.mipmap.ico_contact);
            }
            else if(position == 6){
                image.setImageResource(R.mipmap.ico_conso);
            }
            else if(position == 7){
                image.setImageResource(R.mipmap.ico_relations);
            }
            else if(position == 8){
                image.setImageResource(R.mipmap.ico_religions);
            }
            else if(position == 9){
                image.setImageResource(R.mipmap.ico_sante);
            }
            else if(position == 10){
                image.setImageResource(R.mipmap.ico_scolarite);
            }
            else if(position == 11){
                image.setImageResource(R.mipmap.ico_sexualite);
            }
            else if(position == 12){
                image.setImageResource(R.mipmap.ico_violences);
            }
            else if(position == 13){
                image.setImageResource(R.mipmap.ico_divers);
            }
        }
    }

  2. #2
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Ne serait-ce pas la position?

    Je n'ai pas encore utilisé de Drawer mais un recyclerView.
    J'ai déjà vu des choses bizarres avec le champs position.
    En scrollant il recompte à partir de 0 il me semble

    Tu devrais peut-être te baser sur la description du texte de l'item à cette position plutôt que de sa position.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Par défaut
    Ne serait-ce pas la position?

    Je n'ai pas encore utilisé de Drawer mais un recyclerView.
    J'ai déjà vu des choses bizarres avec le champs position.
    En scrollant il recompte à partir de 0 il me semble
    Oui je me suis fait la même réflexions. Ont dirait que ça écrase la liste en le recreant completement par hasard. Mais pourquoi je n'en ai pas la moindre idée.

    Le fait de scroller est un évenement ça je suis d'accord, mais est ce que c'est considérer comme un changement de configuration si le haut de la liste disparait en scrollant?

  4. #4
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    J'ai édité au dessus.

    Il doit repasser par le getView pour rafraichir l'écran.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Par défaut
    J'ai essayé en me basant sur la description du texte, mais ça ne change strictement rien.

    Je vais essayé autre chose. Le pire, c'est que j'ai déjà une autre listView avec un ArrayAdapter personnaliser, qui d'ailleur fait exactement la même chose, mais je n'ai aucun problème d'inversion.

    EDIT: J'ai essayé d'utiliser une arraylist mais toujours rien. Pourtant j'ai exactement le même adapter copier / coller qu'une autre liste, mais celle ci ne rencontre aucun problème. Les positions reste les mêmes, même si ont scroll

  6. #6
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Tu as 2 items (le 0 et 5) qui n'ont pas d'icones.
    Essaye de mettre une image quelconque pour tester.
    Ensuite si ça passe tu peux mettre une image transparente.

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

Discussions similaires

  1. [Struts-Layout] problème avec layout:datagrid
    Par khayri dans le forum Struts 1
    Réponses: 2
    Dernier message: 20/04/2007, 09h31
  2. Problème de Layout
    Par jason69 dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 30/08/2006, 15h45
  3. [SashForm]Problème de layout
    Par Efkar dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 18/08/2006, 13h28
  4. Problème de layout
    Par menuge dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 10/05/2006, 16h47
  5. [JscrollPane]Problèmes avec layout du panel intérieur
    Par Baptiste Wicht dans le forum AWT/Swing
    Réponses: 14
    Dernier message: 19/03/2006, 13h08

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