2016-12-07 104 views
0

我正在制作一个使用Xamarin的Android应用程序,它允许用户添加并查看各种类型的信息。目前,我为用户能够存储的每种类型的信息做出了“添加项目”屏幕,但是当前有11个屏幕,并且当我添加显示视图时,则是另外11个屏幕。最终可能会进一步增长。有没有更好的方法来处理这种事情?什么是处理多个“添加”屏幕的最佳方式

更多详细信息:

要做到使用2项一个很简单的例子,让我们说,用户可以存储有关汽车的以下信息:

  1. 外观颜色
  2. 内饰颜色
  3. 门的数量。

然后让说,用户可以保存下列关于建设:

  1. 楼层金额
  2. 地址
  3. 电话号码

对于汽车 '添加项目'屏幕我想为每个信息设置textviews和plainviews,然后让我说我想在底部有一个框允许用户上传图片。然后,对于建筑“添加项目”屏幕,我希望再次为每条信息提供文字浏览和简明视图,但是这次我希望在底部有一个用于笔记的框。

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

TLDR:什么是最好的方式来处理屏幕服务相同的目的,但看起来不同?我是否为每个添加屏幕制作单独的活动和布局,或者是否有一种方法可以使用根据要添加的项目类型而改变的主布局/活动?

PS:我不认为使用Xamarin在此扮演任何角色,但我想提到它是安全的。

回答

1

什么是最好的方式来处理屏幕服务相同的目的,但看起来不同?

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

    <include 
        layout="@layout/upload_image" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" /> 
    
  2. 动态布局,也适合你。例如两个“车”与“立”的布局需要一些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); 
         } 
        } 
    } 
    

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

+0

谢谢你的回答。这或多或少给了我需要知道的信息。 – xCasper

相关问题