如何在1个活动中动态显示更多或更少的片段?

时间:2018-01-19 04:13:19

标签: android android-layout android-fragments ui-design

我的应用有log_in活动,主要活动和设置活动。

activity目前正在多个片段之间流动:

在第一个fragment中,用户选择一个主题(来自动态填充的recyclerview cardviews),然后将主题分区并发送到第二个片段。

第二个fragment显示相应的列表(另一个动态填充的recyclerview cardviews(格式非常不同,具有不同的cardviews)。用户可以返回第一个片段并选择另一个主题,该选项再次被分区并发送到第二个片段以显示相关列表等。

我想设置第二个“页面”,使其顶部有1 fragment,覆盖屏幕的前80%,底部有1个片段,覆盖底部20%屏幕,虽然在第一个“页面”上只有1个片段,覆盖了100%的屏幕。

这就是我现在在流程中每个片段之间切换的方式:

main.java

bundle = new Bundle();
bundle.putParcelable("itemlist", itemlist);
fragment = new fragment_2();
fragment.setArguments(bundle);
fragmentManager = getSupportFragmentManager();
transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.main_container, fragment).commit();

我的activity_main.xml(主要活动)有这样的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/ColorBG"
    tools:context="com.app.activity.main">
    <FrameLayout
        android:id="@+id/main_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>
</LinearLayout>

所以main_container是我用相关片段替换的FrameLayout。

我找不到任何方法来做到这一点,有人能告诉我吗?

我唯一能想到的是在activity_main.xml中有2个FrameLayouts,并且第二个容器以layout_width =“0”和layout_height =“0”开头,但我觉得这是一个糟糕的方法它。有没有办法将LinearLayout本身替换为其中包含2个FrameLayouts的另一个LinearLayout,然后将适当的片段分配给这些容器?

或者最好的方法是什么?

我想以“正确的方式”做事(所以我不想进行单独的活动)而且我的目标是API 16,但我可能愿意接受API 23/24。

1 个答案:

答案 0 :(得分:0)

您可以使用LinearLayout的weightSum属性以80:20的比例进行划分。

 <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="3"
android:orientation="vertical">
<FrameLayout
    android:id="@+id/frame1"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="2"/>
<FrameLayout
    android:id="@+id/frame2"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"/>

</LinearLayout>

要使用您想要100%给出的相同布局,您可以将frame2的可见性设置为GONE,并可以将frame1的布局动态设置为3 (总共weightSum将使其成为100%)。