首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何以编程方式将android:layout_columnWeight="1“设置为android support v7网格布局中的元素

如何以编程方式将android:layout_columnWeight="1“设置为android support v7网格布局中的元素
EN

Stack Overflow用户
提问于 2015-07-27 22:07:06
回答 4查看 16.8K关注 0票数 35

我正在尝试以编程方式构建一个有2列的GirdLayout,我希望这些列的宽度相等,设置为屏幕宽度的一半。

我知道你可以从API21开始或者使用support v7 GirdLayout视图来做这件事。我看到一些使用android:layout_columnWeight="1“来做这件事的例子。但我找不到如何通过编程来实现这一点。

有人能帮我解决这件事吗?

代码语言:javascript
复制
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);
    }
 }
}

解决方案:

代码语言:javascript
复制
 GridLayout.LayoutParams parem = new LayoutParams(GridLayout.spec(GridLayout.UNDEFINED, 1f),      GridLayout.spec(GridLayout.UNDEFINED, 1f));
 v.setLayoutParams(parem);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-27 22:56:29

我在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

所以也许你可以尝试一下这样的方法:

代码语言:javascript
复制
((GridLayout.LayoutParams) this.getLayoutParams()).columnSpec =
    GridLayout.spec(GridLayout.UNDEFINED, 1f);
票数 33
EN

Stack Overflow用户

发布于 2017-11-26 11:58:21

-Here你就是!:>

代码语言:javascript
复制
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);
票数 9
EN

Stack Overflow用户

发布于 2018-03-11 08:43:38

对于任何使用xamarin.android的人来说,这些答案对我很有帮助,但我不得不稍微改变一下语法。因此,如果其他人正在使用xamarin.android,下面是语法:

代码语言:javascript
复制
GridLayout.LayoutParams param = new GridLayout.LayoutParams();
param.RowSpec = GridLayout.InvokeSpec(GridLayout.Undefined, 1f);
param.ColumnSpec = GridLayout.InvokeSpec(GridLayout.Undefined, 1f);
view.LayoutParameters = param;

其中view是包含在GridLayout中的视图。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31655352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档