Android:以编程方式添加和删除布局

时间:2016-11-24 15:09:40

标签: android android-layout layout

我有一个带有4个浮动标签的布局,下面有一个按钮。

我想给用户一个选项,当按下按钮在其下方显示一个新的布局,包括每次点击时的TextView和ImageView(最多3个布局)

See example of requested Layout

我的问题是这种布局的最佳设计是什么?

是否使用Visibily GONE添加ald布局并在每次布局时单击按钮显示?

或以编程方式添加它们?

此外,我想让用户选择从总共三个中删除他想要的任何布局。

提前致谢。

1 个答案:

答案 0 :(得分: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;
        }
    }
}

希望有所帮助,您的实际编码方式在很大程度上取决于您希望实现的灵活性和布局数量。