如何以编程方式设置layout_weight?

时间:2018-11-09 17:25:21

标签: c# android xamarin.android android-layout-weight

免责声明:AFAIK该问题到目前为止,对于XAMARIN ANDROID尚无答案Android/Java已被多次回答。

我的问题是我没有GridLayoutParams的构造函数重载,该构造函数将layout_weight作为参数...

以下是我要通过代码复制的XML:

    android:layout_width="0sp"
    android:layout_height="wrap_content"
    android:layout_weight="1"

不设置layout_weight会使控件(复选框)完全不可见。

这里是使用Xamarin Android代码的地方:

            CheckBox cb = new CheckBox(this);
            cb.Id = View.GenerateViewId();
            GridLayout.LayoutParams cbButtonLayoutParams = new GridLayout.LayoutParams();
            cbButtonLayoutParams.RowSpec = GridLayout.InvokeSpec(row, 1);   // Setting row and rowspan respectivly
            cbButtonLayoutParams.ColumnSpec = GridLayout.InvokeSpec(column, 1);    // Setting col and colspan respectivley
            cbButtonLayoutParams.Width = 0;
            cbButtonLayoutParams.Height = GridLayout.LayoutParams.WrapContent;
            cbButtonLayoutParams.SetGravity(GravityFlags.Center);
            // How do I set the weight ? There is no property nor constructor...
            // cbButtonLayoutParams.???
            cb.LayoutParameters = cbButtonLayoutParams;

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

它在相应的Spec下。

cbButtonLayoutParams.RowSpec.weight = 1; //might be Weight in C#
cbButtonLayoutParams.ColumnSpec.weight = 1;

我不确定您要行权还是列权,但这就是您要两者兼而有之的方式。

编辑:

我相信InvokeSpec()等效于spec(),这意味着第二个参数为权重,只要两个参数均为Int32。 / p>


此外,layout_weight通常仅适用于该元素的父级为LinearLayout的情况。您确定CheckBox实际上是添加到GridLayout而不是LinearLayout子级吗?