Android Bottom NavigationView занимает слишком большую высоту

Я не использую какие-либо стили/темы или какие-либо сложные настройки, но вид нижней навигации принимает неожиданную высоту,

Я использую wrap_content для высоты, поэтому получил следующий вывод:

 <com.google.android.material.bottomnavigation.BottomNavigationView
    android:id = "@+id/bottom_nav"
    android:layout_width = "match_parent"
    **android:layout_height = "wrap_content"**
    app:labelVisibilityMode = "selected"
    app:menu = "@menu/bottom_nav_menu" />

и при использовании фиксированной высоты, т. е. ?attr/actionbarsize, я получаю следующий вывод (все значки/метки свернуты):

код:

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id = "@+id/bottom_nav"
    android:layout_width = "match_parent"
    android:layout_height = "?attr/actionBarSize"
    app:labelVisibilityMode = "selected"
    app:menu = "@menu/bottom_nav_menu" />

Полный код макета:

    <?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout 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:id = "@+id/main"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:orientation = "vertical"
    tools:context = ".AppInstalledCheckActivity"
    android:background = "#FFEB3B">

    <EditText
        android:id = "@+id/edittextPackageName"
        android:layout_width = "match_parent"
        android:layout_height = "60dp"
        android:hint = "Enter Package Name" />

    <Button
        android:id = "@+id/buttonCheckInstalled"
        android:layout_width = "match_parent"
        android:layout_height = "45dp"
        android:text = "Enter Package Name" />

    <androidx.fragment.app.FragmentContainerView
        android:id = "@+id/nav_host_fragment"
        android:name = "androidx.navigation.fragment.NavHostFragment"
        android:layout_width = "match_parent"
        android:layout_height = "400dp"
        app:navGraph = "@navigation/navgraph" />

     <com.google.android.material.bottomnavigation.BottomNavigationView
    android:id = "@+id/bottom_nav"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    app:labelVisibilityMode = "selected"
    app:menu = "@menu/bottom_nav_menu" />


</LinearLayout>

Я хочу, чтобы он имел равную или аналогичную высоту, как инструмент/панель действий.

0
0
100
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно изменить

<androidx.fragment.app.FragmentContainerView
        android:id = "@+id/nav_host_fragment"
        android:name = "androidx.navigation.fragment.NavHostFragment"
        android:layout_width = "match_parent"
        **android:layout_height = "400dp"**
        app:navGraph = "@navigation/navgraph" />

к

**android:layout_height = "match_parent"**

Я сделал это, и нижняя навигация стала ниже экрана, поскольку контейнер фрагментов занял всю высоту. это не может быть решением, поскольку высота нижней навигации не имеет ничего общего с высотой других дочерних представлений в родительском слое. @jamal

CodingDevil 30.05.2024 07:31

Я исправил и написал правильный ответ, пожалуйста, проверьте.

CodingDevil 30.05.2024 12:43
Ответ принят как подходящий

Необходимо внести два изменения:

Измените корневой LinearLayout на RelativeLayout:

<RelativeLayout 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:id = "@+id/main"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    tools:context = ".AppInstalledCheckActivity">

Прокомментируйте/удалит windowInsetsListener из метода oncreate активности.

/*        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }*/

Окончательный XML:

    <?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout 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:id = "@+id/main"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:orientation = "vertical"
    tools:context = ".AppInstalledCheckActivity">


    <LinearLayout
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:orientation = "vertical">

        <EditText
            android:id = "@+id/edittextPackageName"
            android:layout_width = "match_parent"
            android:layout_height = "60dp"
            android:hint = "Enter Package Name" />

        <Button
            android:id = "@+id/buttonCheckInstalled"
            android:layout_width = "match_parent"
            android:layout_height = "45dp"
            android:text = "Enter Package Name" />

    </LinearLayout>

    <androidx.fragment.app.FragmentContainerView
        android:layout_marginTop = "150dp"
        android:id = "@+id/nav_host_fragment"
        android:name = "androidx.navigation.fragment.NavHostFragment"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"
        app:navGraph = "@navigation/navgraph" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id = "@+id/bottom_nav"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:layout_alignParentBottom = "true"
        app:itemTextAppearance = "@style/TextAppearance.MaterialComponents.Caption"
        app:labelVisibilityMode = "selected"
        app:menu = "@menu/bottom_nav_menu" />


</RelativeLayout>

Вывод:

Другие вопросы по теме