我的应用有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。
答案 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%)。