我正在使用Xamarin创建一个Android应用程序,允许用户添加然后查看各种类型的信息。目前我制作了一个'添加项目'屏幕显示用户能够存储的每种类型的信息,但目前是11个屏幕,当我添加显示视图时,那就是11个。最终可能会增长到更多。有没有更好的方法来处理这类事情?
更多细节:
使用2个项目做一个非常简单的例子,假设用户可以存储有关汽车的以下信息:
然后让我们说用户可以存储以下关于建筑物的内容:
对于汽车'添加项目'屏幕我想要每个信息的文本视图和简历,然后让我说我想要一个底部的框允许用户上传图像。然后为建筑物添加项目'屏幕我想再次提供每条信息的文本视图和简介,但这次我希望在底部有一个备注框。
这又是一个简单的例子。实际上,屏幕总体上看起来非常不同,但在允许用户添加信息的意义上提供相同的功能,但是这些信息在大多数情况下也彼此大不相同。
TLDR :处理具有相同目的但看起来不同的屏幕的最佳方法是什么?我是否为每个添加屏幕制作单独的活动和布局,或者是否有办法根据所添加项目的类型使用更改的主布局/活动?
PS:我不认为使用Xamarin可以参与其中,但我想提及它是安全的。
答案 0 :(得分:1)
处理具有相同目的但看起来不同的屏幕的最佳方法是什么?
抽象出布局的相同部分。例如,您的“汽车”和“建筑物”布局都应具有“上传图像”模式。当你设计这种布局时。您可以使用<include>
标记,如下所示
<include
layout="@layout/upload_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
动态布局也适合您。例如,“car”和“Building”布局都需要一些textView,您可以编写如下代码:
public class DynamicLayout : LinearLayout
{
private List<LinearLayout> layouts;
public DynamicLayout(Context context, int textViewcount) : base(context)
{
this.Initialize(textViewcount);
}
protected override void OnSizeChanged(int w, int h, int oldw, int oldh)
{
base.OnSizeChanged(w, h, oldw, oldh);
foreach (var l in layouts)
{
l.LayoutParameters = new LinearLayout.LayoutParams(w / layouts.Count, ViewGroup.LayoutParams.WrapContent);
}
}
private void Initialize(int textViewcount)
{
this.Orientation = Orientation.Horizontal;
layouts = new List<LinearLayout>();
for (int n = 0; n < textViewcount; n++)
{
var layout = new LinearLayout(this.Context)
{
Orientation = Orientation.Vertical,
LayoutParameters =
new LinearLayout.LayoutParams(this.Width / textViewcount, ViewGroup.LayoutParams.WrapContent)
};
layouts.Add(layout);
if ("car")
{
var textView = new TextView(this.Context)
{
Text = "Car"
};
layout.AddView(textView);
}
else if ("building")
{
var textView = new TextView(this.Context)
{
Text = "building"
};
layout.AddView(textView);
}
this.AddView(layout);
}
}
}
但动态布局很难控制视图的显示。如果两种方法结合使用可能会更好。