Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I set android:layout_columnWeight="1" programmatically to an element in an android support v7 Gridlayout

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); 
like image 667
hans_dc Avatar asked Jul 27 '15 14:07

hans_dc


2 Answers

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); 
like image 74
vilpe89 Avatar answered Oct 06 '22 03:10

vilpe89


-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); 
like image 30
Nguyen Hoà Avatar answered Oct 06 '22 03:10

Nguyen Hoà