2016-11-24 114 views
-1

我有一個帶有4個浮動標籤的佈局,在它們下面有一個按鈕。Android:以編程方式添加和刪除佈局

我想給用戶一個選項,按鈕按下時顯示它下面一個新的佈局,包括每一次點擊的TextView和ImageView的(最多3個版面)

See example of requested Layout

我的問題什麼是這種佈局的最佳設計?

是否在Visibily GONE中添加ald佈局,並在每次佈局時單擊按鈕顯示?

或者以編程方式添加它們?

另外我想給用戶一個選項,從總共三個中刪除他想要的任何佈局。

在此先感謝。

回答

0

最簡單的選擇可能就是您提出的建議 - 在xml佈局文件中添加所有佈局,並將各個佈局的可見性設置爲「GONE」。如果您想添加更多佈局,您可能需要考慮以編程方式創建它們,以便節省資源並在創建活動時不加載所有圖像。

您可能希望將其中包含的所有內容(看起來像一個垂直線性佈局)的佈局放入一個scrollView中,以便設置可見時佈局不會移出框架。

所以你需要一個按鈕的onClick函數,使下一個佈局不可見,另一個隱藏佈局。

你的XML可能看起來像這樣(扔到你喜歡使用任何佈局這一點,我用了一個垂直的線性佈局):

<Button 
    android:text="Button" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/button" 
    android:onClick="addLayout" /> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_weight="1" 
    android:visibility="gone" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/layout1"> 

    <TextView 
     android:text="TextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/textView" 
     android:layout_gravity="center_horizontal" /> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:srcCompat="@mipmap/ic_launcher" 
     android:id="@+id/imageView" /> 

    <Button 
     android:text="hide" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/button2" 
     android:onClick="hideParent (MainActivity)" /> 
</LinearLayout> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_weight="1" 
    android:visibility="gone" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/layout2"> 

    <TextView 
     android:text="TextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/textView" 
     android:layout_gravity="center_horizontal" /> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:srcCompat="@mipmap/ic_launcher" 
     android:id="@+id/imageView" /> 

    <Button 
     android:text="hide" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/button3" 
     android:onClick="hideParent (MainActivity)" /> 
</LinearLayout> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_weight="1" 
    android:visibility="gone" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/layout3"> 

    <TextView 
     android:text="TextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/textView" 
     android:layout_gravity="center_horizontal" /> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:srcCompat="@mipmap/ic_launcher" 
     android:id="@+id/imageView" /> 

    <Button 
     android:text="hide" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/button4" 
     android:onClick="hideParent (MainActivity)" /> 

</LinearLayout> 

正如我所說的,它可能是有益包裝一個ScrollLayout周圍的一切這只是基本的想法。你的主要可能是這樣的:

LinearLayout[] layouts; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    layouts = new LinearLayout[3]; 
    layouts[0] = (LinearLayout) findViewById(R.id.layout1); 
    layouts[1] = (LinearLayout) findViewById(R.id.layout2); 
    layouts[2] = (LinearLayout) findViewById(R.id.layout3); 
} 

public void hideParent(View v) { 
    ((LinearLayout)v.getParent()).setVisibility(View.GONE); 
} 

public void addLayout(View v) { 
    for (int i = 0; i <= 2; i++) { 
     if (layouts[i].getVisibility() == View.GONE) { 
      layouts[i].setVisibility(View.VISIBLE); 
      break; 
     } 
    } 
} 

希望幫助,編碼的實際的方式在很大程度上取決於你想要達到的佈局的靈活性和數量。

+0

謝謝你!這正是我想要的。只是一個更正:for循環應該是'for(int i = 0; i <3; i ++)' –

+0

很高興我能幫上忙。是的,你說得對,謝謝,只是編輯它。 –

相關問題