как установить layout_columnWeight = "1" при изменении ориентации для вида карты внутри GridLayout - PullRequest
0 голосов
/ 12 октября 2018

Я столкнулся с проблемой при попытке уменьшить количество столбцов внутри GridLayout при изменении ориентации, я сделал этот метод, чтобы обойти это:

private void changeColumnCount(int columnCount) {
    if (grid.getColumnCount() != columnCount) {
        final int viewsCount = grid.getChildCount();
        for (int i = 0; i < viewsCount; i++) {
            CardView view = (CardView) grid.getChildAt(i);
            view.setLayoutParams(new GridLayout.LayoutParams());
            ViewGroup.MarginLayoutParams cardsMargins = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
            int px = (int)DpToPixel(16,getApplicationContext());
            cardsMargins.setMargins(px,0,px,px);
        }
        grid.setColumnCount(columnCount);
    }
}

Мой макет какследующее: как я сказал ранее, у меня есть GridLayout, который содержит CardViews (android.support.v7.widget.CardView)

<GridLayout
        android:id="@+id/mainGrid"
        android:columnCount="2"
        android:rowCount="3"
        android:alignmentMode="alignMargins"
        android:columnOrderPreserved="false"
        android:layout_weight="8"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:padding="14dp">


        <android.support.v7.widget.CardView
            android:layout_width="0dp"
            android:layout_height="120dp"
            android:layout_columnWeight="1"
            android:layout_marginBottom="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_rowWeight="1"
            android:clickable="true"
            app:cardBackgroundColor="@color/cards_color"
            app:cardCornerRadius="8dp"
            app:cardElevation="4dp">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal|center_vertical"
                android:layout_margin="16dp"
                android:orientation="vertical">

                <ImageView
                    android:layout_width="70dp"
                    android:layout_height="70dp"
                    android:layout_gravity="center_horizontal"
                    app:srcCompat="@drawable/ic_baseline_info_white" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Me"
                    android:textAlignment="center"
                    android:textColor="@android:color/background_light"
                    android:textSize="18sp"
                    android:textStyle="bold" />

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

Проблема в том, что когда я вызываю метод, упомянутый выше, он создает новое представление карты безпараметры android:layout_rowWeight="1" и android:layout_columnWeight="1"

Вот как это происходит в начале:

Img1

и вот как этостановится после вызова этого метода:

Img2

Как изменить этот метод, чтобы строки cardViews заполняли ширину gridLayout?

и заранее спасибо.

...