Je voudrais avoir un carré (même largeur que la hauteur) GridView remplir toute la hauteur de l'écran en orientation paysage. Le Gridview est un échiquier (8 par 8 carrés) avec le xml:Élément carré pleine hauteur en android
<com.example.jens.jchess2.view.MyGridView
android:id="@+id/chessboard"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="0dp"
android:numColumns="8"
android:verticalSpacing="0dp"
android:horizontalSpacing="0dp">
</com.example.jens.jchess2.view.MyGridView>
et les éléments de la grille sont:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/square"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#000080"
android:orientation="vertical"
android:padding="0pt">
<ImageView
android:id="@+id/square_background"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:padding="0pt" />
<ImageView
android:id="@+id/piece"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:padding="0pt" />
</FrameLayout>
, où les ImageViews correspondent à des carrés et des pièces (tous deux de images png) du tableau.
Dans la coutume MyGridView je passer outre onMeasure comme suit:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = getContext().getResources().getDisplayMetrics().heightPixels;
if (width > height) {
super.onMeasure(
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
);
} else {
super.onMeasure(
MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY)
);
}
}
qui me donne un GridView carré portrait et paysage orientation. En mode portrait, il remplit toute la largeur et tout va bien. En mode paysage, cependant, il s'étend en dessous de l'écran parce que la hauteur (= largeur) du GridView/board est trop grande. Il est trop grand par la hauteur de la barre d'outils et la hauteur de la barre d'état. Comment puis-je obtenir la bonne taille pour le GridView, c'est-à-dire la hauteur de l'écran moins la hauteur de la barre d'état moins la hauteur de la barre d'outils?
rendre heightMeasureSpec égal à la hauteur de la fenêtre .... –