Intereting Posts
Bluetooth 4.0 / Smart / Низкая энергия на Samsung Galaxy S3 Как использовать файл apk для пользовательской библиотеки в других приложениях Как заставить Bitmap сжимать без изменения размер растрового изображения? Обновлять элементы счетчика на основе выбранного элемента другого счетчика Как найти скорость, используя только акселерометры? Попытка вручную подписать пакет android с помощью jarsigner.exe и установить с помощью adb.exe JUnit4 – AssertionFailedError: тестов не найдено Установите согласованный стиль для всех EditText (например) Android-приложение сбой на Motorola defy reason <s3dReadConfigFile: 75>: не удается открыть файл для чтения Как остановить безумие обезьян? Чтобы активность Android всегда использовалась в режиме ландшафта URL http live Streaming URL с помощью медиаплеера Gson 2.2.2, вызывающий переполнение стека только на 4.2.1 Обновление Android Studio застряло? AdvertisingIdClient # getAdvertisingIdInfo иногда возвращает значение null, так как v9.8.0

Как установить android: layout_columnWeight = "1" программно для элемента в поддержке android v7 Gridlayout

Я пытаюсь построить GirdLayout программно с 2 столбцами, и я хочу, чтобы эти столбцы имели равную ширину, равную половине ширины экрана.

Я понял, что вы можете сделать это с API 21 или с поддержкой v7 GirdLayout. Я вижу примеры, которые используют android: layout_columnWeight = "1" для этого. Но я не могу найти, как это сделать программно.

Может ли кто-нибудь помочь мне в этом вопросе?

package com.tunify.v3.component; import java.util.ArrayList; import android.support.v7.widget.GridLayout; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.ViewGroup; import com.tunify.asme.data.ChangeableSelectionParameterValue; public class ChangeableSelectionParameters extends GridLayout{ //private ArrayList<ChangeableSelectionParameterView> selectionParameterViews; private ArrayList<ChangeableSelectionParameterValue> selectionParameterValues; private static final int ITEM_PADDING_LEFT_DP = 0; private static final int ITEM_PADDING_RIGHT_DP = 0; private static final int ITEM_PADDING_TOP_DP = 0; private static final int ITEM_PADDING_BOTTOM_DP = 0; //private static final int MUSICCOLLECTION_DISPLAY_TEXT_SIZE_SP = 15; public ChangeableSelectionParameters(android.content.Context context, ArrayList<ChangeableSelectionParameterValue> selectionParameterValues) { super(context); this.selectionParameterValues = selectionParameterValues; initializeLayoutBasics(context); initializeComponents(); } private void initializeLayoutBasics(android.content.Context context) { setOrientation(VERTICAL); setColumnCount(2); setRowCount((int)Math.ceil(selectionParameterValues.size()/2.0)); int width = ViewGroup.LayoutParams.MATCH_PARENT; int height = ViewGroup.LayoutParams.WRAP_CONTENT; android.view.ViewGroup.LayoutParams layoutParams = new android.view.ViewGroup.LayoutParams(width, height); this.setLayoutParams(layoutParams); DisplayMetrics metrics = getResources().getDisplayMetrics(); int paddingLeftPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ITEM_PADDING_LEFT_DP, metrics); int paddingRightPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ITEM_PADDING_RIGHT_DP, metrics); int paddingTopPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ITEM_PADDING_TOP_DP, metrics); int paddingBottomPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ITEM_PADDING_BOTTOM_DP, metrics); setPadding(paddingLeftPx, paddingTopPx, paddingRightPx, paddingBottomPx); } private void initializeComponents() { for(ChangeableSelectionParameterValue param : this.selectionParameterValues){ ChangeableSelectionParameterView v = new ChangeableSelectionParameterView(getContext(), param); //TODO set views layout column weight to 1 this.addView(v); } } } 

РЕШЕНИЕ:

  GridLayout.LayoutParams parem = new LayoutParams(GridLayout.spec(GridLayout.UNDEFINED, 1f), GridLayout.spec(GridLayout.UNDEFINED, 1f)); v.setLayoutParams(parem); 

Solutions Collecting From Web of "Как установить android: layout_columnWeight = "1" программно для элемента в поддержке android v7 Gridlayout"

Я нашел этот метод из GridLayout: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.0_r1/android/widget/GridLayout.java#GridLayout.spec % 28int% 2Cfloat% 29

Так что, возможно, вы могли бы попробовать что-то вроде этого:

 ((GridLayout.LayoutParams) this.getLayoutParams()).columnSpec = GridLayout.spec(GridLayout.UNDEFINED, 1f); 

Эти функции GridLayout.Spec позволят вам правильно установить вес:

 public static Spec spec(int start, int size, Alignment alignment, float weight) public static Spec spec(int start, Alignment alignment, float weight) public static Spec spec(int start, int size, float weight) public static Spec spec(int start, float weight) 

Пример использования:

 ((LayoutParams) gm.getViewFromGridCoords(i, j).getLayoutParams()).columnSpec = GridLayout.spec(j, span, CENTER, 1);