Android - Master/Detail 带扩展母版的布局
Android - Master/Detail layout with expanded master
我正在尝试创建一个 master/detail 布局,如果未显示详细信息,主布局会占用所有可用 space。
我找到的所有示例,包括来自 Android Studio 的 master/detail 模板,都始终显示详细信息部分,即使是空的。
我想实现以下目标:
这应该是布局,当没有显示细节时。
[[ 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>
这使得 "details" 占据了 50% 的宽度,即使 "details" 没有实际内容(这是可以理解的,因为权重分布自由 space 均匀)。
设置明细内容的代码也很简单:
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" 占用较少 space(例如,可用宽度的 50%),"details" 占用其余部分
这是否可以仅通过 XML 声明来完成,还是我还必须以编程方式进行操作(例如,在添加 "details" 时更改布局参数)?
如果 "master" 是一个显示多个 RecyclerView 的 ViewPager 并且 "details" 是一个 ScrollView 中的内容(这使得使用 "wrap_content" 成为一个问题,因为它们的大小不是很好定义)?
就我个人而言,如果我要实现这一点,那么我会使用 XML 中的详细信息片段将其可见性设置为 "Gone",当然,我的方法是以编程方式进行的,因此我将设置一旦我膨胀细节片段,可见性回到 "Visible"。
充气前的这个
<FrameLayout
android:id="@+id/details"
android:layout_width="0dpt"
android:layout_weight="0.5"
android:layout_height="match_parent"
android:visibility="gone"/> // Keep it gone before
充气后,
View b = findViewById(R.id.details);
b.setVisibility(View.VISIBLE);
让我知道它现在是否合适,否则我们将寻找替代方案
我正在尝试创建一个 master/detail 布局,如果未显示详细信息,主布局会占用所有可用 space。 我找到的所有示例,包括来自 Android Studio 的 master/detail 模板,都始终显示详细信息部分,即使是空的。
我想实现以下目标:
这应该是布局,当没有显示细节时。
[[ 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>
这使得 "details" 占据了 50% 的宽度,即使 "details" 没有实际内容(这是可以理解的,因为权重分布自由 space 均匀)。
设置明细内容的代码也很简单:
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" 占用较少 space(例如,可用宽度的 50%),"details" 占用其余部分
这是否可以仅通过 XML 声明来完成,还是我还必须以编程方式进行操作(例如,在添加 "details" 时更改布局参数)?
如果 "master" 是一个显示多个 RecyclerView 的 ViewPager 并且 "details" 是一个 ScrollView 中的内容(这使得使用 "wrap_content" 成为一个问题,因为它们的大小不是很好定义)?
就我个人而言,如果我要实现这一点,那么我会使用 XML 中的详细信息片段将其可见性设置为 "Gone",当然,我的方法是以编程方式进行的,因此我将设置一旦我膨胀细节片段,可见性回到 "Visible"。
充气前的这个
<FrameLayout
android:id="@+id/details"
android:layout_width="0dpt"
android:layout_weight="0.5"
android:layout_height="match_parent"
android:visibility="gone"/> // Keep it gone before
充气后,
View b = findViewById(R.id.details);
b.setVisibility(View.VISIBLE);
让我知道它现在是否合适,否则我们将寻找替代方案