Я пытаюсь повторить следующее XML в коде:
<GridLayout
android:id="@+id/row2Grid"
android:layout_row="1"
android:layout_column="0"
android:layout_rowWeight="40"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:alignmentMode="alignMargins"
android:columnCount="3"
android:columnOrderPreserved="true"
android:padding="0px"
android:rowCount="2"
>
<!-- Box 1 -->
<androidx.cardview.widget.CardView
app:cardBackgroundColor="#00ff00"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_rowWeight="8"
android:layout_column="0"
android:layout_columnWeight="6"
android:layout_marginRight="3dp"
android:layout_marginBottom="3dp">
</androidx.cardview.widget.CardView>
<!-- Box 2 -->
<androidx.cardview.widget.CardView
app:cardBackgroundColor="#ff0000"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_rowWeight="8"
android:layout_column="1"
android:layout_columnWeight="6"
android:layout_marginRight="3dp"
android:layout_marginBottom="3dp"
app:cardElevation="8dp">
</androidx.cardview.widget.CardView>
</GridLayout>
Вышеприведенное выглядит так, что я и хочу:
Прежде всего GridLayout с идентификатором row2Grid
останется как XML. Однако Box 1 и Box 2 не будут, поэтому они должны генерироваться кодом и добавляться к row2Grid
динамически
Для этого я создал эту функцию, которая вызывается дважды внутри функции onCreate MainActivity:
@ Переопределить защищенный void onCreate (Bundle saveInstanceState) {... generateBox ("# ff0000"); generateBox ( "# 00ff00"); ...}
public void generateBox(String colorStr) {
gridLayout = findViewById(R.id.row2Grid);
int row2children = gridLayout.getChildCount();
CardView cardView = new CardView(ctx);
cardView.setBackgroundColor(Color.parseColor(colorStr));
GridLayout.LayoutParams cardViewLayoutParams = new GridLayout.LayoutParams(GridLayout.spec(0), GridLayout.spec(row2children));
cardViewLayoutParams.columnSpec = GridLayout.spec(0,8.0f);
cardViewLayoutParams.rowSpec = GridLayout.spec(0,8.0f);
cardViewLayoutParams.height = 0;
cardViewLayoutParams.width= 0;
cardViewLayoutParams.setMargins(0,0, 12, 34);
gridLayout.addView(cardView, cardViewLayoutParams);
gridLayout.invalidate();
gridLayout.requestLayout();
}
Но это не работает и дает только следующий результат:
Что я делать неправильно?