1

运行此 Activity 时出现非法参数异常。有人能指出为什么吗?我对 Specs 的评论可能会让您误解我对这段代码的理解:

[Activity(Label = "Views/Layouts/GridLayout/3. Form (Java)", MainLauncher = true)]
  [IntentFilter(new[] { Intent.ActionMain }, Categories = new string[] { })]
  public class GridLayout3 : Activity {
    protected override void OnCreate(Bundle bundle) {
      base.OnCreate(bundle);


      SetContentView(Grid(this));
      //SetContentView (Create (this));
    }

    public static View Grid(Context context) {
      GridLayout gL = new GridLayout(context);
      gL.AlignmentMode = GridAlign.Bounds;
      gL.UseDefaultMargins = true;
      //gL.ColumnOrderPreserved = false;
      //gL.RowOrderPreserved = false;
      gL.RowCount = 5;
      gL.ColumnCount = 5;

      //I want these Specs to tell the View to take up 2 rows of space. 
      //IE, (row 0-indexed) of 3 and 4 in column 4 should contain 
      //the same button
      GridLayout.Spec specialRowSpec = GridLayout.InvokeSpec(3, 4);
      GridLayout.Spec specialColSpec = GridLayout.InvokeSpec(4);

      bool keyIsSpecial = false;
      for (int i = 0; i < gL.RowCount; i++) {
        GridLayout.Spec row = GridLayout.InvokeSpec(i);

        for (int v = 0; v < gL.ColumnCount; v++) {
          GridLayout.Spec col = GridLayout.InvokeSpec(v);
          Button bt = new Button(context);
          bt.Text = "Tester";
          if (i == 3 && v == 4) {
            keyIsSpecial = true;
          }
          if (keyIsSpecial) {
            GridLayout.LayoutParams param = new GridLayout.LayoutParams();
            param.RowSpec = specialRowSpec;
            param.ColumnSpec = specialColSpec;
            param.Height = 100;
            gL.AddView(bt, new GridLayout.LayoutParams(param));
            return gL;
          } else {
            gL.AddView(bt, new GridLayout.LayoutParams(row, col));
          }
          if (v == gL.ColumnCount - 1) {
            v = 0;
            break;
          }
        }
      }
      return gL;
    }

当我添加具有特殊规格的视图时引发异常:gL.AddView(bt, new GridLayout.LayoutParams(param));

这是我可能误解的 GridLayout.Spec 文档的链接:http: //developer.android.com/reference/android/widget/GridLayout.Spec.html

我还尝试将第二个参数交换为我的 specialRowSpec 以使用总大小(高度)而不是行的索引。例如:GridLayout.Spec specialRowSpec = GridLayout.InvokeSpec(3, 2);这只是给了我一个 5 x 5 的按钮网格,没有跨越多行的按钮。

任何问题?

4

0 回答 0