Я пытаюсь создать макет мастер / деталь, где мастер занимает все доступное пространство, если деталь не отображается. Во всех найденных мною примерах, включая шаблон master / detail из 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();
Как мне изменить мой макет так, чтобы
- «мастер» занимал всю ширину, пока не добавляются детали
- когда добавлен MyDetailsFragment, "master" занимает меньше места e (например, 50% доступной ширины), а «детали» занимают все остальное
Можно ли это сделать исключительно с помощью объявлений XML, или мне также нужно делать что-то программно (например, изменение параметры макета при добавлении «деталей»)?
Изменится ли ваш ответ, если «master» - это ViewPager, показывающий несколько RecyclerViews, а «details» - это содержимое в ScrollView (что делает использование wrap_content проблемой в качестве их размер не очень хорошо определен)?