#android #android-dialogfragment #android-jetpack-navigation
#Android #android-dialogfragment #android-jetpack-навигация
Вопрос:
Я пытаюсь отобразить диалоговый фрагмент, который после отображения на экране должен отображать начальный пункт назначения из nav_graph, указанного в NavHostFragment. Вот макет диалогового фрагмента:
<?xml version="1.0" encoding="utf-8"?>
<layout>
<!-- <androidx.constraintlayout.widget.ConstraintLayout -->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="800dp">-->
<androidx.coordinatorlayout.widget.CoordinatorLayout 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="match_parent">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:visibility="visible">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="8dp"
android:orientation="vertical">
<fragment
android:id="@ id/nav_host_home_bottom_sheet"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@ id/dismiss_registration_button"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/membership_navigation" />
<com.google.android.material.button.MaterialButton
android:id="@ id/dismiss_registration_button"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/open_sans_regular"
android:text="@string/all_dismiss"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<!-- </androidx.constraintlayout.widget.ConstraintLayout>-->
В диалоговом фрагменте отображается только кнопка «Отклонить». Когда я раскомментирую ConstraintLayout с layout_height, фиксированным на 800dp, тогда startDestination из NavHostFragment загружается нормально. Проблема в том, что я не хочу кодировать layout_height — как я могу отобразить его с помощью CoordinatorLayou или ConstraintLayout без жесткого кодирования layout_height ?
Ответ №1:
Чтобы заставить его работать, я просто изменил макет диалогового фрагмента на
<?xml version="1.0" encoding="utf-8"?>
<layout>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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="match_parent">
<fragment
android:id="@ id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/membership_navigation" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
а затем обрабатывает вид прокрутки и другие фрагменты, где это необходимо.