Xamarin.Android中GridLayout的Column Span不生效问题求助
解决Xamarin.Android中GridLayout按钮列跨度不生效的问题
嘿,我瞅了下你的代码,问题出在GridLayout.InvokeSpec的参数顺序上!你现在把起始位置和跨度的参数搞反了,导致列跨度的设置根本没起作用。
问题根源
在Xamarin.Android里,GridLayout.InvokeSpec的第一个参数是跨度值,第二个参数才是起始索引。你原来的写法是把起始位置放在前面、跨度放后面,等于告诉GridLayout:“从跨度值的位置开始,占起始索引这么多空间”,这完全和你的需求反过来了!
修正方案
我帮你调整了addViewToGridLayout方法的参数顺序,同时优化了按钮的布局参数(用GridLayout专属的LayoutParams代替ViewGroup的,适配性更好):
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); RelativeLayout mainlayout = new RelativeLayout(this); RelativeLayout.LayoutParams layoutparameter = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MatchParent, RelativeLayout.LayoutParams.MatchParent); mainlayout.LayoutParameters = layoutparameter; GridLayout gl = getView(); mainlayout.AddView(gl); SetContentView(mainlayout); } private GridLayout getView() { GridLayout gridlayout = new GridLayout(this); Button b = new Button(this); b.Text = "Button1"; gridlayout.LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent); gridlayout.RowCount = 2; gridlayout.ColumnCount = 2; addViewToGridLayout(gridlayout, b, 0, 1, 0, 2);// 此处设置列跨度为2 return gridlayout; } private void addViewToGridLayout(GridLayout pGridLayout, View view, int row, int pRowSpan, int column, int pColumnSpan) { // 修正InvokeSpec的参数顺序:先跨度,后起始索引 Spec rowSpec = GridLayout.InvokeSpec(pRowSpan, row); Spec columnSpec = GridLayout.InvokeSpec(pColumnSpan, column); GridLayout.LayoutParams gridParam = new GridLayout.LayoutParams(rowSpec, columnSpec); // 让按钮填满分配的单元格空间 gridParam.Width = GridLayout.LayoutParams.MatchParent; gridParam.Height = GridLayout.LayoutParams.MatchParent; view.LayoutParameters = gridParam; pGridLayout.AddView(view); }
额外说明
- 修正后的
InvokeSpec调用,会正确告诉GridLayout:按钮从第0行开始占1行,从第0列开始占2列,完美实现跨列效果。 - 给按钮的GridLayout参数设置
MatchParent,确保按钮能填满分配给它的单元格空间,不会出现大小适配问题。
内容的提问来源于stack exchange,提问作者jad
相关产品推荐
相关产品推荐

