我尝试使用Xamarin Android调整控件。
我使用GridView做了一个foreach循环:
var layout = new GridLayout(this);
SetContentView(layout);
foreach(JObject s in theArray)
{
string Text = s.GetValue("Name").ToString();
var sbLabel = new TextView(this);
sbLabel.Text = Text;
var sbButton = new Button(this);
sbButton.Text = "Info";
layout.AddView(sbLabel);
layout.AddView(sbButton);
}
但我希望TextView和Button在彼此之下。
有人可以帮我正确对齐吗?如果可能,也以表格为中心。
谢谢!
答案 0 :(得分:1)
这可以通过将Label
和Button
包裹在LinearLayout
中来完成:
for (int i = 1; i < 4; i++)
{
var relative = new LinearLayout(this);
relative.Orientation = Orientation.Vertical;
var sbLabel = new TextView(this);
sbLabel.Gravity = Android.Views.GravityFlags.CenterHorizontal;
var sbButton = new Button(this);
sbLabel.Text = i.ToString(); ;
sbButton.Text = "Info";
relative.AddView(sbLabel);
relative.AddView(sbButton);
layout.AddView(relative);
}
在替代中,您也可以使用RelativeLayout
(性能更高)执行此操作(代码更多,您必须拥有Id
Label
}):
for (int i = 1; i < 4; i++)
{
var relative = new RelativeLayout(this);
var params1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WrapContent, RelativeLayout.LayoutParams.WrapContent);
var sbLabel = new TextView(this);
var layoutparams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WrapContent, RelativeLayout.LayoutParams.WrapContent);
layoutparams.AddRule(LayoutRules.CenterHorizontal);
sbLabel.LayoutParameters = layoutparams;
var sbButton = new Button(this);
sbLabel.Id = i;
sbLabel.Text = i.ToString();
sbButton.Text = "Info";
params1.AddRule(LayoutRules.Below, sbLabel.Id);
relative.AddView(sbLabel);
relative.AddView(sbButton, params1);
layout.AddView(relative);
}
最终结果(上述两个选项都相同):