1

J'ai une application qui fonctionne exactement comme vous le souhaitez sur un appareil réel Nexus 6P exécutant API 23 et un 6P, 5 & émulé 4 exécutant API 24, mais qui montre un comportement étrange par rapport à GridLayout sur émulé Nexus 5 & 4 API de fonctionnement 22.android gridlayout ne s'affiche pas dans l'émulateur API 22

L'application ne dispose que d'une seule activité avec plusieurs RelativeLayout s qui sont définies par programme .VISIBLE & .INVISIBLE. Dans un tel RelativeLayout j'ai 2 GridLayout s comme suit. Lors de l'émulation de l'API 22, le bas GridLayout ne s'affiche pas mais le haut fait toujours abstraction de l'API 22, 23 ou 24. Le bas GridLayout ne s'affiche que lorsque je change le paramètre de l'émulateur en API 24 (pas essayé 23). Pourquoi cela pourrait-il être? Je ne pense pas que j'utilise quoi que ce soit sur GridLayout qui nécessite l'API 23 ou plus. Ce problème signifie que je ne peux pas installer cette application sur un Nexus 5 en cours d'exécution API 22 ou 21. Merci pour toute suggestion.

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/gameOperations" 
    android:visibility="invisible"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/launchDisplay" 
     android:gravity="center_horizontal"> 

     <TextView 
      android:text="@string/app_name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/launchTitle" 
      android:textStyle="normal|bold" 
      android:textSize="50dp" 
      android:textAlignment="center" 
      android:fontFamily="casual" 
      android:textColor="@android:color/holo_blue_dark" 
      android:layout_marginTop="15dp" 
      android:layout_weight="1" /> 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:srcCompat="@drawable/brain_orig_crop_500" 
      android:id="@+id/launchImage" 
      android:scaleType="centerInside" 
      android:layout_weight="2" /> 

     <TextView 
      android:text="@string/launchSubtitle" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/launchSubtitle" 
      android:fontFamily="casual" 
      android:textAlignment="center" 
      android:textColor="@android:color/holo_blue_dark" 
      android:textSize="25dp" 
      android:textStyle="normal|bold" 
      android:layout_weight="1" 
      android:layout_marginTop="15dp" /> 

     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/launchControls" 
      android:gravity="center_vertical" 
      android:layout_weight="1"> 

      <Button 
       android:text="@string/debug" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:id="@+id/launchSpacerLeft" 
       android:layout_weight="1" 
       android:background="@color/colourTransparent" 
       android:textSize="15dp" 
       android:fontFamily="casual" 
       android:textAllCaps="false" 
       android:visibility="invisible" /> 

      <Button 
       android:text="@string/launchStart" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/launchStart" 
       android:textColor="@android:color/holo_green_dark" 
       android:textSize="38dp" 
       android:textStyle="normal|bold" 
       android:onClick="prepareNewGame" 
       android:layout_weight="3" 
       android:background="@color/colourTransparent" 
       android:fontFamily="casual" 
       android:textAllCaps="false" /> 

      <Button 
       android:text="@string/layoutNormal" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:id="@+id/launchSpacerRight" 
       android:layout_weight="1" 
       android:textAllCaps="false" 
       android:background="@color/colourTransparent" 
       android:fontFamily="casual" 
       android:textSize="15dp" /> 

     </LinearLayout> 

    </LinearLayout> 

    <GridLayout 
     android:layout_width="match_parent" 
     android:id="@+id/header" 
     android:columnCount="6" 
     android:rowCount="4" 
     android:layout_height="168dp" 
     android:useDefaultMargins="true" 
     android:layout_alignParentTop="true"> 

     <ImageView 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      app:srcCompat="@drawable/brain_orig_500" 
      android:id="@+id/imageBrain" 
      android:layout_column="0" 
      android:layout_row="0" 
      android:layout_rowWeight="1" 
      android:layout_rowSpan="4" 
      android:layout_columnSpan="6" 
      android:layout_columnWeight="1" 
      android:layout_gravity="fill" 
      android:scaleType="fitCenter" /> 

     <Button 
      android:text="@string/debug" 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:id="@+id/debug" 
      android:layout_column="2" 
      android:layout_row="3" 
      android:layout_columnSpan="2" 
      android:layout_rowWeight="1" 
      android:layout_columnWeight="1" 
      android:fontFamily="casual" 
      android:textSize="18dp" 
      android:textStyle="normal|bold" 
      android:textAllCaps="false" 
      android:onClick="prepareNewGame" 
      android:background="@color/colourTransparent" 
      android:layout_gravity="fill" 
      android:paddingTop="10dp" 
      android:visibility="gone" /> 

     <TextView 
      android:text="@string/blank" 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:id="@+id/spacerColumn" 
      android:layout_column="0" 
      android:layout_columnWeight="1" 
      android:layout_columnSpan="2" 
      android:layout_gravity="fill" 
      android:layout_row="0" 
      android:layout_rowSpan="3" 
      android:layout_rowWeight="3" /> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:text="@string/timerDisplay" 
      android:id="@+id/timerDisplay" 
      android:layout_column="0" 
      android:layout_row="3" 
      android:layout_columnSpan="2" 
      android:layout_rowWeight="1" 
      android:layout_columnWeight="1" 
      android:fontFamily="casual" 
      android:textSize="30dp" 
      android:textStyle="normal|bold" 
      android:gravity="start" 
      android:layout_gravity="fill" 
      android:layout_rowSpan="1" /> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:id="@+id/rightWrongDisplay" 
      android:layout_column="2" 
      android:layout_row="3" 
      android:layout_columnSpan="2" 
      android:layout_rowWeight="1" 
      android:layout_columnWeight="1" 
      android:textAlignment="center" 
      android:textStyle="normal|bold" 
      android:textSize="28dp" 
      android:fontFamily="casual" 
      android:layout_gravity="fill" 
      android:layout_rowSpan="1" 
      android:visibility="gone" /> 

     <TextView 
      android:text="@string/scoreDisplay" 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:id="@+id/scoreDisplay" 
      android:layout_column="4" 
      android:layout_row="3" 
      android:layout_columnSpan="2" 
      android:layout_rowWeight="1" 
      android:layout_columnWeight="1" 
      android:fontFamily="casual" 
      android:textStyle="normal|bold" 
      android:textSize="30dp" 
      android:gravity="end" 
      android:layout_gravity="fill" 
      android:layout_rowSpan="1" /> 

    </GridLayout> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:id="@+id/scoreBoard" 
     android:layout_alignParentTop="false" 
     android:layout_below="@+id/header" 
     android:visibility="gone"> 

    </LinearLayout> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="100dp" 
     android:id="@+id/question" 
     android:layout_below="@+id/scoreBoard" 
     android:layout_marginTop="15dp" 
     android:gravity="center"> 

     <TextView 
      android:text="@string/operandLeft" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/operandLeft" 
      android:layout_weight="5" 
      android:textSize="60sp" 
      android:fontFamily="casual" 
      android:textAlignment="textEnd" 
      android:textStyle="normal|bold" 
      android:paddingEnd="10dp" 
      android:paddingStart="0dp" 
      android:layout_gravity="center_vertical|end" 
      android:paddingLeft="0dp" 
      android:paddingRight="10dp" 
      android:visibility="gone" /> 

     <TextView 
      android:text="@string/operator" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/operator" 
      android:layout_weight="1" 
      android:textAlignment="center" 
      android:textStyle="normal|bold" 
      android:textSize="60sp" 
      android:fontFamily="casual" 
      android:visibility="gone" /> 

     <TextView 
      android:text="@string/operandRight" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/operandRight" 
      android:layout_weight="5" 
      android:textAlignment="textStart" 
      android:textStyle="normal|bold" 
      android:textSize="60sp" 
      android:fontFamily="casual" 
      android:paddingStart="10dp" 
      android:paddingEnd="0dp" 
      android:layout_gravity="center_vertical|start" 
      android:paddingLeft="10dp" 
      android:paddingRight="0dp" 
      android:visibility="gone" /> 

     <TextView 
      android:text="@string/sampleQuestion" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/questionView" 
      android:layout_weight="1" 
      android:gravity="center" 
      android:textSize="60dp" 
      android:textStyle="normal|bold" 
      android:fontFamily="casual" /> 

    </LinearLayout> 

    <GridLayout 
     android:layout_width="match_parent" 
     android:layout_height="250dp" 
     android:layout_below="@+id/question" 
     android:layout_marginTop="10dp" 
     android:id="@+id/answers" 
     android:rowCount="2" 
     android:columnCount="2" 
     android:useDefaultMargins="true" 
     android:layout_above="@+id/footer"> 

     <Button 
      android:text="@string/answer0" 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:id="@+id/answer0" 
      android:layout_column="0" 
      android:layout_row="0" 
      android:layout_rowWeight="1" 
      android:layout_columnWeight="1" 
      android:onClick="actionAnswer" 
      android:textSize="50dp" 
      android:textAllCaps="false" 
      android:textStyle="normal|bold" 
      android:fontFamily="casual" 
      android:layout_gravity="fill_horizontal" 
      android:background="@color/colourTransparent" /> 

     <Button 
      android:text="@string/answer1" 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:id="@+id/answer1" 
      android:layout_column="1" 
      android:layout_row="0" 
      android:layout_rowWeight="1" 
      android:layout_columnWeight="1" 
      android:onClick="actionAnswer" 
      android:textSize="50dp" 
      android:textAllCaps="false" 
      android:textStyle="normal|bold" 
      android:fontFamily="casual" 
      android:layout_gravity="fill_horizontal" 
      android:background="@color/colourTransparent" /> 

     <Button 
      android:text="@string/answer2" 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:id="@+id/answer2" 
      android:layout_column="0" 
      android:layout_row="1" 
      android:layout_rowWeight="1" 
      android:layout_columnWeight="1" 
      android:layout_gravity="fill_horizontal" 
      android:onClick="actionAnswer" 
      android:textSize="50dp" 
      android:textAllCaps="false" 
      android:textStyle="normal|bold" 
      android:fontFamily="casual" 
      android:background="@color/colourTransparent" /> 

     <Button 
      android:text="@string/answer3" 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:id="@+id/answer3" 
      android:layout_column="1" 
      android:layout_row="1" 
      android:layout_rowWeight="1" 
      android:layout_columnWeight="1" 
      android:layout_gravity="fill_horizontal" 
      android:onClick="actionAnswer" 
      android:textSize="50dp" 
      android:textAllCaps="false" 
      android:textStyle="normal|bold" 
      android:fontFamily="casual" 
      android:background="@color/colourTransparent" /> 

    </GridLayout> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="25dp" 
     android:id="@+id/footer" 
     android:layout_marginTop="15dp" 
     android:gravity="center" 
     android:visibility="gone" 
     android:layout_alignParentBottom="true"> 

     <TextView 
      android:text="@string/footerText" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/footerText" 
      android:layout_weight="1" 
      android:gravity="center" 
      android:textSize="18sp" 
      android:fontFamily="casual" /> 

    </LinearLayout> 
</RelativeLayout> 

Répondre

1

moi aussi eu exactement cette question et j'ai finalement trouvé une solution en utilisant android.support.v7.widget.GridLayout au lieu de simplement GridLayout

Je ne crois comprends pas les détails, mais profondément les versions précédentes de GridLayout ne pas soutenir la android:layout_columnWeight, bien qu'il ne gère la propriété android:layout_width. Étant donné que vous définissez la largeur à "0dp" en utilisant "layout_width" (qui existe), puis en essayant de "étirer" en utilisant "columnWeight" (qui n'existe pas) le widget reste à 0dp et n'est donc pas affiché. Pour contourner ce problème, la version "support.v7" de GridLayout vous permet d'utiliser "layout_columnWeight", bien que vous deviez être sûr de le préfixer avec "app" comme "0 android", comme dans app:layout_columnWeight = "1". Donc, votre fichier de mise en page doit lire:

<android.support.v7.widget.GridLayout 
     android:layout_width="match_parent" 
     android:id="@+id/header" 
     android:columnCount="6" 
     android:rowCount="4" 
     android:layout_height="168dp" 
     android:useDefaultMargins="true" 
     android:layout_alignParentTop="true"> 

    <ImageView 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      app:srcCompat="@drawable/brain_orig_500" 
      android:id="@+id/imageBrain" 
      android:layout_column="0" 
      android:layout_row="0" 
      android:layout_rowWeight="1" 
      android:layout_rowSpan="4" 
      android:layout_columnSpan="6" 
      app:layout_columnWeight="1" 
      android:layout_gravity="fill" 
      android:scaleType="fitCenter" /> 

    . 
    . 
    . 

</android.support.v7.widget.GridLayout> 

Les changements critiques étant l'ajout android.support.v7.widget.-Gridlayout et le changement android:layout_columnWeight="1" à app:layout_columnWeight="1"

Vous aurez également ajouter la version de gridlauout-v7 que vous souhaitez utiliser pour la dépendance section de votre manifeste. Pour moi, j'ajouté:

compile 'com.android.support:gridlayout-v7:26.0.0-alpha1'

Et enfin, si vous êtes désireux d'inclure le poids de la colonne dans un style puis omettre le préfixe « app », comme dans:

<style name="button_digit" parent="button"> 
    <item name="android:layout_width">0dip</item> 
    <item name="layout_columnWeight">1</item> 
    . 
    . 
    . 

</style>