如何在程序中设置layout_weight?

3
免责声明:据我所知,目前对于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;

非常感谢您的帮助。


设置权重仅适用于LinearLayout.LayoutParams。只有在尝试转换时才可用,不确定是否可以这样使用... - PedroHawk
1个回答

0

它在相应的规范下。

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

我不确定你想要行权重还是列权重,但这就是如何同时实现它们的方法。

编辑:

我相信InvokeSpec()等同于spec(),这意味着第二个参数应该是权重,只要两个参数都是Int32


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


1
复选框的父级是GridLayout。你是对的,InvokeSpec有一个重载,它将浮点数作为第二个参数,表示权重。我会尝试一下。 - anon
1
运行得非常好 :) - anon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接