I'm trying to build a GirdLayout programmatically with 2 columns and I want these columns to have equal width set at half the width of the screen.
I figured out you can do this since API 21 or with the support v7 GirdLayout view. I see examples that uses android:layout_columnWeight="1" to do this. But I can not find how to do this programmatically.
Can anyone help me with this matter?
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); } } }
SOLUTION:
GridLayout.LayoutParams parem = new LayoutParams(GridLayout.spec(GridLayout.UNDEFINED, 1f), GridLayout.spec(GridLayout.UNDEFINED, 1f)); v.setLayoutParams(parem);
I found this method from 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
So maybe you could try something like this:
((GridLayout.LayoutParams) this.getLayoutParams()).columnSpec = GridLayout.spec(GridLayout.UNDEFINED, 1f);
-Here you are ! :>
Button button = new Button(this); GridLayout.LayoutParams param= new GridLayout.LayoutParams(GridLayout.spec( GridLayout.UNDEFINED,GridLayout.FILL,1f), GridLayout.spec(GridLayout.UNDEFINED,GridLayout.FILL,1f)); param.height = 0; param.width = 0; button.setLayoutParams(param);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With