2016-12-07 9 views
0

私はXamarinを使用してさまざまなタイプの情報を追加して表示できるアンドロイドアプリを作っています。現在、ユーザーが保存できる情報の種類ごとに「項目を追加」画面を作成しましたが、現在は11画面です。表示ビューを追加すると、それはさらに11画面になります。最終的にはそれ以上に成長する可能性があります。このようなことを処理するには良い方法がありますか?複数の「追加」画面を処理する最良の方法は何ですか

詳細:

2つのアイテムを使用して非常に簡単な例を行うには、ユーザーが車に関する以下の情報を保存することができると言うことができます:

  1. 外装色
  2. 内装色
  3. ドアの数。

次に、ユーザがビルについては、以下を保存することができると言うことができます:

  1. 住所
  2. 電話番号

のAMTの車のためのアイテムの追加screen私はそれらの情報のそれぞれについてtextviewsとplainviewsをしたいと思うし、私は、ユーザーが画像をアップロードできるように、下部にボックスが欲しいと言うことができます。それから、ビルドの「アイテムの追加」画面では、情報の各部分についてtextviewsとplainviewsをもう一度持っていきたいと思いますが、今回は、代わりにボトムにメモ用のボックスが必要です。

これも簡単な例です。実際には、画面全体がかなり違って見えますが、ユーザーが情報を追加できるという意味で同じ機能を提供しますが、その情報も大部分はお互いに大きく異なります。

TLDR:同じ目的を果たしていますが、異なって見えるスクリーンを処理する最善の方法は何ですか?各追加画面に対して個別のアクティビティとレイアウトを作成するのですか、または追加するアイテムのタイプに応じて変更するマスターレイアウト/アクティビティを使用する方法がありますか?

PS:私はXamarinを使ってこの部分を演奏するとは思っていませんが、私はそれが安全であると言いたかったのです。

答えて

1

同じ目的を果たしていますが、外観が異なるスクリーンを扱う最良の方法は何ですか?

  1. 抽象レイアウトの同じ部分アウト。たとえば、「車」レイアウトと「建物」レイアウトの両方に「画像のアップロード」モードが必要です。あなたがこの種のレイアウトを設計するとき。

    <include 
        layout="@layout/upload_image" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" /> 
    
  2. を次のようにして、ダイナミックなレイアウトもあなたのために適している<include>タグを使用することができます。たとえば、「車」と「ビル」レイアウトの両方が、いくつかの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); 
         } 
        } 
    } 
    

    しかし、ダイナミックなレイアウトは、ビューの表示を制御することは困難です。 2つの方法を組み合わせて使用​​すれば、より良いことができます。

+0

ありがとうございました。これは多かれ少なかれ私が知る必要がある情報を私に与えました。 – xCasper

関連する問題