简体   繁体   中英

how to set app:layout_columnWeight and app:layout_rowWeight to GridLayout's child programmatically

I have a GridLayout in my layout.xml . I want to add ImageView as child to the GridLayout . I also need to set some properties to the child.

Below is the layout.xml which I want to do programmatically:

<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>

I tried this programmatically. But problem is I am not able to set app:layout_columnWeight and app:layout_rowWeight programmatically.

Problem is, how to set app:<property-name> programmatically?

You can generate imageview dynamically and assign it to your grid layout like this ..

    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);

for gridlayout spec , go for

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 );
        }
    }

For more information check this

GridLayout Specs

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM