Я столкнулся с проблемой при попытке уменьшить количество столбцов внутри 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"
Вот как это происходит в начале:
и вот как этостановится после вызова этого метода:
Как изменить этот метод, чтобы строки cardViews
заполняли ширину gridLayout
?
и заранее спасибо.