Je travaille sur mon premier projet Android, un jeu de mémoire dans Android Studio. Le cadre de l'activité du jeu doit contenir des vues de texte, affichées sur une ligne (pour les statistiques) en haut de l'écran et les cartes mémoire en dessous. Il y a plusieurs versions du jeu de mémoire, donc le nombre de cartes de mémoire varie - et par conséquent la dimension de leur GridLayout.
Ma mise en page principale est une LinearLayout (verticale). J'y ai placé un autre LinearLayout (horizontal), où se trouvent les Textviews. Pour afficher les cartes, j'ai utilisé un GridLayout qui sera rempli de cartes une fois le jeu lancé. Le LinearLayout (avec les TextViews) doit toujours rester en haut de l'écran. Le GridLayout devrait être centré dans l'espace restant en dessous.
Ce que j'obtiens, c'est que les deux mises en page restent au milieu, ou que la LinearLayout est correcte, mais que la GridLayout se trouve soit en bas, soit en haut de l'espace restant.
J'ai essayé de trouver une solution ici sur SO, et je pense que j'ai essayé toutes les combinaisons possibles de la gravity
- et layout_gravity
- les paramètres des composants. Je peux imaginer que le problème est que je peux utiliser soit wrap_content
ou match_parent
dans la mise en page principale, mais pas les deux. Je suppose que j'aurais besoin de wrap_content
pour coller le premier Layout au sommet et match_parent
pour utiliser tout l'espace en dessous de cette mise en page.
Comment puis-je coller le premier Layout en haut et centrer le GridLayout dans l'espace restant ?
L'image montre ma mise en page actuelle (voir le code ci-dessous) et l'aspect que je veux lui donner. grille centrale
Modifier pour clarifier : Le LinearLayout doit coller au haut de l'écran, le GridLayout doit être centré sur l'écran. centré dans le restant espace sous le LinearLayout. RelativeLayout ne fera pas l'affaire correctement, car les mises en page pourraient se chevaucher, en fonction de la quantité de cartes mémoire et des dimensions de l'appareil de l'utilisateur. J'ai téléchargé une autre capture d'écran où l'on voit mieux ce que je veux réaliser :
Voici mon fichier .xml (j'ai supprimé quelques textViews sans importance) :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/MemoryLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="20dp"
android:layout_marginTop="10dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="10dp"
android:layout_weight="1"
android:orientation="horizontal">
<TextView
android:id="@+id/textStatsPairs"
android:layout_width="65dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/textStatsPairs" />
</LinearLayout>
<GridLayout
android:id="@+id/gridLayoutMainActivityTEST"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:columnCount="4"
android:foregroundGravity="center"
android:orientation="horizontal"
android:rowCount="4"
android:textAlignment="center"
android:useDefaultMargins="true"
tools:context=".GameActivity" />
</LinearLayout>