【发布时间】:2020-10-08 11:55:23
【问题描述】:
我正在尝试创建一个主/详细布局,如果未显示详细信息,则主布局会占用所有可用空间。 我找到的所有示例,包括来自 Android Studio 的主/详细模板,总是显示详细部分,即使是空的。
我想实现以下目标:
这应该是布局,没有显示细节。
[[ master ]]
(扩展主视图填满整个屏幕)
而当细节显示出来的时候,应该就是布局了。
[[ master ][ detail ]]
(主和细节并排)
这是我目前的布局,但我尝试了不同的组合:
<?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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/master"
android:name="com.example.MyMasterFragment"
android:layout_width="0dp"
android:layout_weight="0.5"
android:layout_height="match_parent"/>
<FrameLayout
android:id="@+id/details"
android:layout_width="0dpt"
android:layout_weight="0.5"
android:layout_height="match_parent"/>
</LinearLayout>
这使得“细节”占据了 50% 的宽度,即使“细节”没有实际内容(这是可以理解的,因为权重均匀地分配了可用空间)。
设置详细内容的代码也很简单:
Fragment details = new MyDetailsFragments();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.details, details);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
我该如何改变我的布局,以便
- 只要不添加细节,“master”就占据整个宽度
- 添加 MyDetailsFragment 后,“master”占用的空间更少(例如可用宽度的 50%),“details”占用其余空间
这可以完全通过 XML 声明来完成,还是我也必须以编程方式完成(例如,在添加“细节”时更改布局参数)?
如果“master”是一个显示多个 RecyclerViews 的 ViewPager 并且“details”是一个 ScrollView 中的内容(这使得使用“wrap_content”成为一个问题,因为它们的大小没有很好地定义),你的答案会改变吗?
【问题讨论】:
标签: android layout master-detail