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
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 <?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>
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).
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); } }
À 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
Partager