什么是处理多个"添加"的最佳方法。屏幕

时间:2016-12-07 23:40:38

标签: android android-layout xamarin xamarin.android

我正在使用Xamarin创建一个Android应用程序,允许用户添加然后查看各种类型的信息。目前我制作了一个'添加项目'屏幕显示用户能够存储的每种类型的信息,但目前是11个屏幕,当我添加显示视图时,那就是11个。最终可能会增长到更多。有没有更好的方法来处理这类事情?

更多细节:

使用2个项目做一个非常简单的例子,假设用户可以存储有关汽车的以下信息:

  1. 外观颜色
  2. 室内色彩
  3. 门数。
  4. 然后让我们说用户可以存储以下关于建筑物的内容:

    1. Amt of Floors
    2. 地址
    3. 电话号码
    4. 对于汽车'添加项目'屏幕我想要每个信息的文本视图和简历,然后让我说我想要一个底部的框允许用户上传图像。然后为建筑物添加项目'屏幕我想再次提供每条信息的文本视图和简介,但这次我希望在底部有一个备注框。

      这又是一个简单的例子。实际上,屏幕总体上看起来非常不同,但在允许用户添加信息的意义上提供相同的功能,但是这些信息在大多数情况下也彼此大不相同。

      TLDR :处理具有相同目的但看起来不同的屏幕的最佳方法是什么?我是否为每个添加屏幕制作单独的活动和布局,或者是否有办法根据所添加项目的类型使用更改的主布局/活动?

      PS:我不认为使用Xamarin可以参与其中,但我想提及它是安全的。

1 个答案:

答案 0 :(得分:1)

  

处理具有相同目的但看起来不同的屏幕的最佳方法是什么?

  1. 抽象出布局的相同部分。例如,您的“汽车”和“建筑物”布局都应具有“上传图像”模式。当你设计这种布局时。您可以使用<include>标记,如下所示

    <include
        layout="@layout/upload_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    
  2. 动态布局也适合您。例如,“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);
            }
        }
    }
    

    但动态布局很难控制视图的显示。如果两种方法结合使用可能会更好。