以编程方式 returns 基于相对布局 c# 的布局约束的通用方法
Generic method that programatically returns a layout constraint based on Relative Layout c#
我有一个视图,在这个视图中我在代码后面添加组件而不是使用 xaml,我有一个相对布局和一个创建标签 Lbl
的 class和一个按钮 MyButton
作为参数传递 宽度、高度、img 源、标签文本和颜色。
var innerLayout = new RelativeLayout() { BackgroundColor = Color.Black };
var myCustomhBtn = new Custom(100, 120, "img.png", "the text of label", Color.White);
现在我想将 xConstraint
和 yConstraint
添加到每个组件。
所有这些都是 x 和 y 约束,形式为:
innerLayout.Children.Add(
myCustomhBtn.MyButton,
xConstraint: Constraint.RelativeToParent((parent) => {
double x1 = parent.Width / 2 - myCustomhBtn.MyButton.Radius;
double x2 = parent.Width - 2 * myCustomhBtn.MyButton.Radius;
return (x1 + x2) / 2 + myCustomhBtn.MyButton.Radius/ 2;
}),
yConstraint: Constraint.RelativeToParent((parent) => {
double y1 = 0;
double y2 = parent.Height / 2 - 2 * myCustomhBtn.MyButton.Radius;
return (y1 + y2) / 2 - myCustomhBtn.MyButton.Radius;
}));
innerLayout.Children.Add(
myCustomhBtn.Lbl,
Constraint.RelativeToView(myCustomhBtn.MyButton.Radius, (parent, sibling) => {
return sibling.X + myCustomhBtn.MyButton.Radius- myCustomhBtn .Lbl.Width / 2;
}),
Constraint.RelativeToView(myCustomhBtn.MyButton.Radius, (parent, sibling) => {
return sibling.Y - 18;
}));
对于标签,我只希望它是 y
的 -18
向上按钮并居中 x
所以基本上我想做类似
的事情
var innerLayout = new RelativeLayout() { BackgroundColor = Color.Black };
var myCustomhBtn = new Custom(100, 120, "img.png", "the text of label", Color.White);
AddComponent(innerlayout, x,y);
但由于每个约束的形式为 Func
xConstraint: Constraint.RelativeToParent((parent) => {return xxxx; })
我不知道如何创建泛型方法
怎么做?或者最好的方法是什么?
and I just want to create a function that recives x and y, and returns the respective x or y Constraint
您可以(虽然我不建议这样做)创建一个 returns Tuple
of Constraint
的方法。
private (Constraint xConstraint, Constraint yConstraint) BuildConstraints(x, y)
{
var xConstraint = Constraint.RelativeToParent(parent => /* whatever ... */);
var yConstraint = Constraint.RelativeToParent(parent => /* whatever ... */);
return (xConstraint, yConstraint);
}
但我宁愿为每个约束创建一个方法
Constraint BuildXConstraint(x)
{
return Constraint.RelativeToParent(parent => /* whatever ... */);
}
我有一个视图,在这个视图中我在代码后面添加组件而不是使用 xaml,我有一个相对布局和一个创建标签 Lbl
的 class和一个按钮 MyButton
作为参数传递 宽度、高度、img 源、标签文本和颜色。
var innerLayout = new RelativeLayout() { BackgroundColor = Color.Black };
var myCustomhBtn = new Custom(100, 120, "img.png", "the text of label", Color.White);
现在我想将 xConstraint
和 yConstraint
添加到每个组件。
所有这些都是 x 和 y 约束,形式为:
innerLayout.Children.Add(
myCustomhBtn.MyButton,
xConstraint: Constraint.RelativeToParent((parent) => {
double x1 = parent.Width / 2 - myCustomhBtn.MyButton.Radius;
double x2 = parent.Width - 2 * myCustomhBtn.MyButton.Radius;
return (x1 + x2) / 2 + myCustomhBtn.MyButton.Radius/ 2;
}),
yConstraint: Constraint.RelativeToParent((parent) => {
double y1 = 0;
double y2 = parent.Height / 2 - 2 * myCustomhBtn.MyButton.Radius;
return (y1 + y2) / 2 - myCustomhBtn.MyButton.Radius;
}));
innerLayout.Children.Add(
myCustomhBtn.Lbl,
Constraint.RelativeToView(myCustomhBtn.MyButton.Radius, (parent, sibling) => {
return sibling.X + myCustomhBtn.MyButton.Radius- myCustomhBtn .Lbl.Width / 2;
}),
Constraint.RelativeToView(myCustomhBtn.MyButton.Radius, (parent, sibling) => {
return sibling.Y - 18;
}));
对于标签,我只希望它是 y
的 -18
向上按钮并居中 x
所以基本上我想做类似
的事情var innerLayout = new RelativeLayout() { BackgroundColor = Color.Black };
var myCustomhBtn = new Custom(100, 120, "img.png", "the text of label", Color.White);
AddComponent(innerlayout, x,y);
但由于每个约束的形式为 Func
xConstraint: Constraint.RelativeToParent((parent) => {return xxxx; })
我不知道如何创建泛型方法
怎么做?或者最好的方法是什么?
and I just want to create a function that recives x and y, and returns the respective x or y Constraint
您可以(虽然我不建议这样做)创建一个 returns Tuple
of Constraint
的方法。
private (Constraint xConstraint, Constraint yConstraint) BuildConstraints(x, y)
{
var xConstraint = Constraint.RelativeToParent(parent => /* whatever ... */);
var yConstraint = Constraint.RelativeToParent(parent => /* whatever ... */);
return (xConstraint, yConstraint);
}
但我宁愿为每个约束创建一个方法
Constraint BuildXConstraint(x)
{
return Constraint.RelativeToParent(parent => /* whatever ... */);
}