2017-09-01 4 views
0

J'ai essayé d'obtenir un GridLayout au travail en utilisant:GridLayout change largeurs

<GridLayout 
     android:layout_width="match_parent" 
     android:layout_height="70dp"> 

     <TextView 
      android:text="sdfgh" 
      android:layout_height="wrap_content" 
      android:id="@+id/AvgGrade" 
      android:layout_row="2" 
      android:layout_column="1" 
      android:layout_rowWeight="0.2" 
      android:layout_columnWeight="0.5" 
      android:layout_gravity="fill" 
      android:textAlignment="gravity" 
      android:layout_columnSpan="1" /> 

     <TextView 
      android:text="words" 
      android:layout_height="wrap_content" 
      android:id="@+id/Totals" 
      android:layout_row="1" 
      android:layout_column="1" 
      android:textAlignment="gravity" 
      android:layout_rowWeight="0.2" 
      android:layout_columnWeight="0.5" 
      android:layout_gravity="fill" 
      android:layout_columnSpan="1" /> 

     <TextView 
      android:text="words" 
      android:layout_height="wrap_content" 
      android:id="@+id/textView3" 
      android:layout_row="2" 
      android:layout_column="0" 
      android:textAlignment="center" 
      android:layout_rowWeight="0.2" 
      android:layout_columnWeight="0.5" 
      android:layout_gravity="fill" 
      android:layout_columnSpan="1" /> 

     <TextView 
      android:text="words" 
      android:layout_height="wrap_content" 
      android:id="@+id/textView4" 
      android:layout_row="1" 
      android:layout_column="0" 
      android:layout_rowWeight="0.2" 
      android:layout_columnWeight="0.5" 
      android:layout_gravity="fill" 
      android:textAlignment="center" 
      android:layout_columnSpan="1" /> 

     <TextView 
      android:text="words" 
      android:layout_height="wrap_content" 
      android:id="@+id/TotalAvg" 
      android:layout_row="0" 
      android:layout_column="1" 
      android:textAlignment="gravity" 
      android:layout_rowWeight="0.2" 
      android:layout_columnWeight="0.5" 
      android:layout_gravity="fill" 
      android:layout_columnSpan="1" /> 

     <TextView 
      android:text="words" 
      android:layout_height="wrap_content" 
      android:id="@+id/textView6" 
      android:layout_row="0" 
      android:layout_column="0" 
      android:textAlignment="center" 
      android:layout_columnWeight="0.5" 
      android:layout_gravity="fill" 
      android:layout_columnSpan="1" /> 

    </GridLayout> 

Mon problème est que ce que les données sont charges dans la deuxième colonne la taille des colonnes change légèrement. J'ai essayé l'alignement gauche et central et rien ne semble empêcher les colonnes de changer. L'utilisateur mettra à jour ces valeurs de façon répétée et le léger «mouvement» des colonnes qui change de direction est vraiment mauvais.

Répondre

0

Après beaucoup de frustration, j'étais incapable de trouver une solution dans la mise en page XML. Cependant, j'ai trouvé une solution qui semble assez bien fonctionner par programme.

J'ai ajouté une méthode appelée à la fin de mon OnCreate

public void ResizeTexts(){ 
    Display display = getWindowManager().getDefaultDisplay(); 
    DisplayMetrics outMetrics = new DisplayMetrics(); 
    display.getMetrics(outMetrics); 

    float density = getResources().getDisplayMetrics().density; 
    float dpWidth = (outMetrics.widthPixels/density); 

    text1.getLayoutParams().width = (int)dpWidth; 
    text2.getLayoutParams().width = (int)dpWidth; 
    text3.getLayoutParams().width = (int)dpWidth; 
    text4.getLayoutParams().width = (int)dpWidth; 
    text5.getLayoutParams().width = (int)dpWidth; 
    text6.getLayoutParams().width = (int)dpWidth; 
} 

que j'adaptai de ce lien re-setting a TextView height programmatically

puis dans ma mise en page XML je l'ai mis en place avec:

<GridLayout 
    android:layout_width="match_parent" 
    android:layout_height="70dp"> 

    <TextView 
     android:text="points" 
     android:layout_height="wrap_content" 
     android:layout_width="10dp" 
     android:id="@+id/text1" 
     android:layout_row="0" 
     android:layout_column="0" 
     android:textAlignment="textEnd" 
     /> 


    <TextView 
     android:text="totals" 
     android:layout_height="wrap_content" 
     android:layout_width="10dp" 
     android:id="@+id/text2" 
     android:layout_row="1" 
     android:layout_column="0" 

     android:textAlignment="textEnd"/> 


    <TextView 
     android:text="score" 
     android:layout_height="wrap_content" 
     android:id="@+id/text3" 
     android:layout_width="10dp" 
     android:layout_row="2" 
     android:layout_column="0" 
     android:textAlignment="textEnd"/> 


    <TextView 
     android:text="123.4" 
     android:layout_height="wrap_content" 
     android:id="@+id/text4" 
     android:layout_width="10dp" 
     android:layout_row="1" 
     android:layout_column="1" 
     android:textAlignment="textEnd"/> 

    <TextView 
     android:text="1.23" 
     android:layout_height="wrap_content" 
     android:id="@+id/text5" 
     android:layout_width="10dp" 
     android:layout_row="2" 
     android:layout_column="1" 
     android:textAlignment="textEnd"/> 

    <TextView 
     android:text="1234 " 
     android:layout_height="wrap_content" 
     android:id="@+id/text6" 
     android:layout_width="10dp" 
     android:layout_row="0" 
     android:layout_column="1" 
     android:textAlignment="textEnd"/> 

</GridLayout> 

* les largeurs de mise en page dans la mise en page xml que j'utilisais pour essayer de «casser», pas réellement utilisé.

Certes, je ne suis pas sûr si c'est le «meilleur» moyen de le faire. Personnellement, je me sens comme le GridLayout XML devrait être en mesure de le faire tout seul. Mais, je ne pouvais pas comprendre.