将 Snackbar 移到 bottomNavigationView 上方

Posted

技术标签:

【中文标题】将 Snackbar 移到 bottomNavigationView 上方【英文标题】:Move Snackbar above the bottomNavigationView 【发布时间】:2020-03-04 01:55:55 【问题描述】:

想将我的小吃栏移到底部导航视图上方

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activityRootLayout"
    android:layout_
    android:layout_
    android:background="@android:color/white">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_
        android:layout_>

        <FrameLayout
            android:layout_
            android:layout_>

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbarView"
                android:layout_
                android:layout_
                android:background="@color/color_primary"
                android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
        </FrameLayout>
    </com.google.android.material.appbar.AppBarLayout>

    <FrameLayout
        android:id="@+id/container"
        android:layout_
        android:layout_
        android:layout_above="@+id/bottomNavigationLayout"
        android:layout_below="@+id/appBarLayout" />

    <LinearLayout
        android:id="@+id/bottomNavigationLayout"
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        android:orientation="vertical">

        <View style="@style/FullDivider" />

        <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/bottomNavigationView"
            android:layout_
            android:layout_
            app:itemBackground="@android:color/white"
            app:itemIconTint="@drawable/selector_bottom_bar_item"
            app:itemTextColor="@color/blue"
            app:labelVisibilityMode="unlabeled"
            app:menu="@menu/main_navigation" />
    </LinearLayout>

    <com.mandarine.features.security.UnlockAppInputView
        android:id="@+id/unlockAppInputView"
        android:layout_
        android:layout_
        android:layout_alignParentTop="true" />
</RelativeLayout>

MainActivity 中这样写:

container?.let 
    Snackbar.make(it, "No internet connection!", Snackbar.LENGTH_LONG).show()

但小吃栏也会从屏幕机器人显示

【问题讨论】:

查看***.com/questions/36332487/… @NileshRathod 我不使用CoordinatorLayout 使用CoordinatorLayoutsetAnchorView()Snackbar 方法。 【参考方案1】:

在BottomNavigationView上方添加一个Layout

例子:

<android.support.design.widget.CoordinatorLayout
    android:layout_
    android:layout_
   android:id="@+id/myLayout"
 android:layout_above="@id/bottomNavigationView">
</android.support.design.widget.CoordinatorLayout>

然后在Java代码中使用:

final View viewPos = findViewById(R.id.myLayout);    
Snackbar.make(viewPos, R.string.snackbar_text, Snackbar.LENGTH_LONG)
                            .setAction(R.string.snackbar_action_undo, showListener)
                            .show();

【讨论】:

【参考方案2】:

我认为问题出在findSuitableParent 函数中。正如您在 232 行上看到的,您的容器用作后备,但随后找到了根视图。尝试将您的容器更改为 CoordinatorLayout,它将解决问题。

【讨论】:

【参考方案3】:

用下一个解决方案解决我的问题:

private fun showNetworkMessage(isConnected: Boolean) 
    if (!isConnected) 
        val snack = Snackbar.make(
            findViewById(R.id.container),
            this.getText(R.string.warning_no_internet_connection), Snackbar.LENGTH_LONG
        )
        val params = snack.view.layoutParams as FrameLayout.LayoutParams
        params.setMargins(0, 0, 0, this.resources.getDimension(R.dimen.action_bar_size).toInt())
        snack.view.layoutParams = params
        snack.show()
    

你可以在哪里看到我没有使用CoordinatorLayout

【讨论】:

以上是关于将 Snackbar 移到 bottomNavigationView 上方的主要内容,如果未能解决你的问题,请参考以下文章

将 Snackbar 移到 bottomNavigationView 上方

如何在 nativescript 应用程序中实现“BottomNavigation”元素?

填充bottomNavigation中的图标

将 Snackbar 用于 5.0+ 设备

将 HTML 插入到 Snackbar 消息中

使 Snackbar 向上推视图