2017-10-05 4 views
0

J'ai un GridLayout dans mon layout.xml. Je veux ajouter ImageView comme enfant au GridLayout. J'ai aussi besoin de définir certaines propriétés pour l'enfant.comment définir l'application: layout_columnWeight et app: layout_rowWeight à l'enfant de GridLayout par programme

Voici la layout.xml que je veux faire par programme:

<android.support.v7.widget.GridLayout 
        android:id="@+id/gridLayout" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_centerInParent="true" 
        app:columnCount="3" 
        app:rowCount="3"> 

        <ImageView 
         android:id="@+id/r1c1" 
         android:layout_width="0dp" 
         android:layout_height="0dp" 
         android:adjustViewBounds="true" 
         android:scaleType="fitXY" 
         android:src="@drawable/a270" 
         app:layout_columnWeight="1" 
         app:layout_gravity="fill_horizontal" 
         app:layout_rowWeight="1" /> 

        <ImageView 
         android:id="@+id/r1c2" 
         android:layout_width="0dp" 
         android:layout_height="0dp" 
         android:adjustViewBounds="true" 
         android:scaleType="fitXY" 
         android:src="@drawable/c0" 
         app:layout_columnWeight="1" 
         app:layout_gravity="fill_horizontal" 
         app:layout_rowWeight="1" /> 

        <ImageView 
         android:id="@+id/r1c3" 
         android:layout_width="0dp" 
         android:layout_height="0dp" 
         android:adjustViewBounds="true" 
         android:scaleType="fitXY" 
         android:src="@drawable/a0" 
         app:layout_columnWeight="1" 
         app:layout_gravity="fill_horizontal" 
         app:layout_rowWeight="1" /> 

        <ImageView 
         android:id="@+id/r2c1" 
         android:layout_width="0dp" 
         android:layout_height="0dp" 
         android:adjustViewBounds="true" 
         android:scaleType="fitXY" 
         android:src="@drawable/c270" 
         app:layout_columnWeight="1" 
         app:layout_gravity="fill_horizontal" 
         app:layout_rowWeight="1" /> 

        <ImageView 
         android:id="@+id/r2c2" 
         android:layout_width="0dp" 
         android:layout_height="0dp" 
         android:adjustViewBounds="true" 
         android:scaleType="fitXY" 
         android:src="@drawable/e0" 
         app:layout_columnWeight="1" 
         app:layout_gravity="fill_horizontal" 
         app:layout_rowWeight="1" /> 

        <ImageView 
         android:id="@+id/r2c3" 
         android:layout_width="0dp" 
         android:layout_height="0dp" 
         android:adjustViewBounds="true" 
         android:scaleType="fitXY" 
         android:src="@drawable/c90" 
         app:layout_columnWeight="1" 
         app:layout_gravity="fill_horizontal" 
         app:layout_rowWeight="1" /> 

        <ImageView 
         android:id="@+id/r3c1" 
         android:layout_width="0dp" 
         android:layout_height="0dp" 
         android:scaleType="fitXY" 
         android:src="@drawable/a180" 
         app:layout_columnWeight="1" 
         app:layout_gravity="fill_horizontal" 
         app:layout_rowWeight="1" /> 

        <ImageView 
         android:id="@+id/r3c2" 
         android:layout_width="0dp" 
         android:layout_height="0dp" 
         android:scaleType="fitXY" 
         android:src="@drawable/c180" 
         app:layout_columnWeight="1" 
         app:layout_gravity="fill_horizontal" 
         app:layout_rowWeight="1" /> 

        <ImageView 
         android:id="@+id/r3c3" 
         android:layout_width="0dp" 
         android:layout_height="0dp" 
         android:scaleType="fitXY" 
         android:src="@drawable/a90" 
         app:layout_columnWeight="1" 
         app:layout_gravity="fill_horizontal" 
         app:layout_rowWeight="1" /> 
       </android.support.v7.widget.GridLayout> 

J'ai essayé ce programme. Mais le problème est que je ne suis pas en mesure de définir app:layout_columnWeight et app:layout_rowWeight par programme.

Le problème est, comment définir app:<property-name> par programme?

+0

pourriez-vous élaborer votre question. qu'est-ce que vous essayez réellement de faire? –

+0

Je veux ajouter le 'ImageViews' comme enfant de' GridLayout' par programmation – XoXo

Répondre

1

Vous pouvez générer imageview dynamiquement et l'affecter à votre mise en page de la grille comme ça ..

ImageView imageView = new ImageView(MainActivity.this); 
    int width = 200; 
    int height = 150; 
    RelativeLayout relt = new RelativeLayout(MainActivity.this); 
    RelativeLayout.LayoutParams parms = new RelativeLayout.LayoutParams(width, height); 
    RelativeLayout.LayoutParams parms_play = new RelativeLayout.LayoutParams(100, 70); 
    imageView.requestLayout(); 
    imageView.setId(i); 
    imageView.setPadding(4, 4, 4, 4); 
    imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
    relt.addView(imageView); 
    gridLayout.addView(relt); 

pour spec GridLayout, optez pour

GridLayout gl = (GridLayout) findViewById(R.id.grid_layout); 
    gl.setColumnCount(8); 
    gl.setRowCount(8); 

    for(int i=0; i<gl.getRowCount(); i++) 
    { 
     GridLayout.Spec rowSpec = GridLayout.spec(i, 1, GridLayout.FILL); 

     for(int j=0;j<gl.getColumnCount();j++) 
     { 
      GridLayout.Spec colSpec = GridLayout.spec(j,1, GridLayout.FILL); 

      TextView tvChild = new TextView(this); 
      tvChild.setText("[ " + i + " | " + j + " ]"); 
      tvChild.setTextSize(18f); 
      tvChild.setTextColor(Color.WHITE); 
      tvChild.setGravity(Gravity.CENTER); 

      GridLayout.LayoutParams myGLP = new GridLayout.LayoutParams(); 
      myGLP.rowSpec = rowSpec; 
      myGLP.columnSpec = colSpec; 

      gl.addView(tvChild, myGLP); 
     } 
    } 

Pour plus d'informations, consultez cette

GridLayout Specs

+0

Je veux faire 'ImageView'' Height' et 'Width' 0dp et je veux utiliser' app: layout_rowWeight' et 'app: layout_columnWeight'. – XoXo

+0

J'ai édité ma réponse. vérifie ça. un lien ci-joint pour l'explication de détail –

+0

J'ai essayé.Mais cela n'a pas fonctionné. ImageView met à l'échelle la hauteur et la largeur complètes du parent. Je suis encore confus comment mettre programme: app: layout_columnWeight par programme. – XoXo