Проблема с компоновкой ограничений в Android

#android #android-constraintlayout #android-bottomnavigationview

#Android #android-constraintlayout #android-bottomnavigationview

Вопрос:

Поэтому я недавно перешел на макеты ограничений, но я не могу разобраться в этом. Итак, вот мой код:

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".dashboard.DashboardActivity">

    <FrameLayout
        android:id="@ id/dashboard_framelayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@ id/dashboard_bottom_navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?android:attr/windowBackground"
        app:itemBackground="@color/colorPrimary"
        app:itemIconTint="@android:color/white"
        app:itemTextColor="@android:color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/dashboard_framelayout"
        app:menu="@menu/menu_dashboard_bottom_navigation" />


</androidx.constraintlayout.widget.ConstraintLayout>
 

И вот как это выглядитвведите описание изображения здесь

Итак, что я делаю не так в своем коде? Я установил ограничение BottomNavigationView на parent, но каким-то образом оно отодвигается дальше вниз, и я понятия не имею, как это исправить.

Ответ №1:

Поскольку FrameLayout является родительским, и вы предоставляете навигацию сверху вниз к нижней части макета фрейма, и именно поэтому он снижался.

Удалите эту строку

     app:layout_constraintTop_toBottomOf="@id/dashboard_framelayout"
 

Ответ №2:

Это действительно работает, но ваша нижняя навигация будет перекрывать FrameLayout. Если это то, что вы хотите, тогда хорошо. Если вы не хотите, чтобы он накладывался, выполните следующие действия:

В FrameLayout измените layout_height=0dp , чтобы соответствовать ограничениям. Также добавьте следующее ограничение: app:layout_constraintBottom_toTopOf="@id/dashboard_bottom_navigation

В BottomNavigationView вам не нужно ничего делать. Вы можете оставить верхнее ограничение (которое будет связывать два представления) или удалить его. В любом случае, если вы скроете NavView, FrameLayout расширится, чтобы заполнить экран, и уменьшится при отображении NavView.

Комментарии:

1. Спасибо, что думали вместе и даже дальше, не думали об этом сценарии tbh: D спасибо!