Android - 我的 Snackbar 出现在底部导航栏的前面而不是它的上方,如何解决?

Posted

技术标签:

【中文标题】Android - 我的 Snackbar 出现在底部导航栏的前面而不是它的上方,如何解决?【英文标题】:Android - My Snackbar appears in front of my Bottom Nav Bar instead above it, how to fix it? 【发布时间】:2018-08-23 12:22:35 【问题描述】:

因为我的 Snackbar 在底部导航栏前面弹出,我已经卡了好几个小时了。

我的布局有问题吗?

是布局的嵌套吗?

感谢任何答案,谢谢:D

我的主布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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/drawer_layout"
android:layout_
android:layout_
android:fitsSystemWindows="true"
tools:openDrawer="start">

    <android.support.design.widget.CoordinatorLayout xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/overview_coordinator_layout"
        android:layout_
        android:layout_>

        <RelativeLayout
            android:layout_
            android:layout_
            android:orientation="vertical">

            <include
                layout="@layout/app_bar_home"
                android:layout_
                android:layout_ />

            <android.support.design.widget.BottomNavigationView
                android:id="@+id/navigation"
                android:layout_
                android:layout_
                android:layout_alignParentBottom="true"
                android:background="@color/colorNavIcon"
                app:itemIconTint="@color/colorNavIcon"
                app:itemTextColor="@color/colorNavText"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:menu="@menu/navigation" />

        </RelativeLayout>

    </android.support.design.widget.CoordinatorLayout>

    <FrameLayout
        android:id="@+id/frame_layout"
        android:layout_
        android:layout_
        android:layout_above="@+id/navigation"
        android:animateLayoutChanges="true">

    </FrameLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_
        android:layout_
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_home"
        app:menu="@menu/activity_home_drawer" />

应用栏布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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_
android:layout_
tools:context="com.project.adrianangub.project_adesua.home">

    <android.support.design.widget.AppBarLayout
    android:layout_
    android:layout_
    android:theme="@style/AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_
        android:layout_
        android:background="?attr/colorPrimaryDark"
        app:popupTheme="@style/PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

<include layout="@layout/content_home" /></android.support.design.widget.CoordinatorLayout>

我的 Snackbar 的 Java 代码:

Snackbar.make(findViewById(R.id.overview_coordinator_layout), "Can you smell what The Rock is cooking?", Snackbar.LENGTH_LONG).show();

这里的图片:

如果你们需要查看更多代码部分,请在此处评论:D

【问题讨论】:

See this question 可能会有帮助 【参考方案1】:

您以错误的方式使用协调器小部件。永远记住协调者的孩子的层次结构必须是:

<CoordinatorLayout>
    <Appbar/>
    <View/> <!--Mostly NestedScrollView or something scrollable-->
    <fab/> <!--Optional-->
    <bottomBar/> <!--Optional-->
</CoordinatorLayout>`

所以您的main_layout.xml 必须更改为:

<android.support.v4.widget.DrawerLayout>
.
.
.
<android.support.design.widget.CoordinatorLayout 
    android:id="@+id/overview_coordinator_layout"
    android:layout_
    android:layout_>

   <android.support.design.widget.AppBarLayout
       android:layout_
       android:layout_
       android:theme="@style/AppBarOverlay">

       <android.support.v7.widget.Toolbar
           android:id="@+id/toolbar"
           android:layout_
           android:layout_
           android:background="?attr/colorPrimaryDark"
           app:popupTheme="@style/PopupOverlay" />

   </android.support.design.widget.AppBarLayout>

   <include layout="@layout/content_home" />

   <android.support.design.widget.BottomNavigationView
        android:id="@+id/navigation"
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        android:background="@color/colorNavIcon"
        android:layout_gravity="bottom"
        app:itemIconTint="@color/colorNavIcon"
        app:itemTextColor="@color/colorNavText"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/navigation" />

</android.support.design.widget.CoordinatorLayout>
.
.
.
</android.support.v4.widget.DrawerLayout>

为了显示 SnackBar,请使用以下代码:

Snackbar.make(findViewById(overview_coordinator_layout), "Hello!", Snackbar.LENGTH_LONG)
        .setAction("Action", null).show();

【讨论】:

以上是关于Android - 我的 Snackbar 出现在底部导航栏的前面而不是它的上方,如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

Android Snackbar 的使用

Android开发——Snackbar使用详解

android中的全局SnackBar

Android KitKat:Snackbar 不在屏幕底部

Android - 活动之间的 Snackbar

Android Snackbar 布局