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



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

我想为用户提供一个选项,在按下按钮以在其下方显示新布局时,每次点击(最多3个布局)

上的textView和imageView在内,

请参阅请求的布局示例

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

是要添加带有可见的ALD布局并单击按钮显示时,每次一个布局都显示?

或以编程方式添加它们?

我也想为用户提供一个选项,以删除他想要的三个布局。

预先感谢。

最简单的选项可能就是您提出的内容 - 添加XML布局文件中的所有布局,并将单个布局的可见性设置为" gone gone"。如果要添加更多的布局,则可能需要考虑以程序为程序创建它们,以节省资源,而不是在创建活动时加载所有图像。

您可能需要将布局放在其中的所有内容(看起来像是垂直线性布局向我面向我),以便在设置可见时不会从框架中移出框架。

因此,您需要一个按钮的on Click函数,这使得可见下一个布局,而另一个则再次隐藏了布局。

您的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>

正如我所说,包裹所有这些可能会有所帮助,这只是一个基本想法。您的主要人物看起来像这样:

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;
        }
    }
}

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

最新更新