显示Snackbar还显示隐藏的底部工作表?

时间:2017-03-30 20:56:18

标签: android

我有一个协调员布局的活动。协调器布局内部是一个视图,它继承了Google支持库底部工作表的默认底部工作表布局行为。问题是当我用协调器布局作为视图调用Snackbar.show()时,底部弹出窗口。

以下是显示snackbar的电话:

Snackbar.make(coordinatorLayout, R.string.status_image_saved, 
Snackbar.LENGTH_SHORT).show();

这是布局:

<android.support.design.widget.CoordinatorLayout>

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout>

        <android.support.v7.widget.Toolbar />

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

    <android.support.v7.widget.RecyclerView />

</android.support.constraint.ConstraintLayout>

<LinearLayout
    android:id="@+id/attachment_selector"
    android:layout_width="match_parent"
    android:layout_height="480dp"
    android:background="@color/colorBack"
    android:elevation="10dp"
    android:orientation="vertical"
    app:behavior_hideable="true"
    app:behavior_peekHeight="@dimen/bottom_sheet_start"
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior">

    <android.support.design.widget.TabLayout
        android:id="@+id/attachment_selector_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabGravity="fill"
        app:tabMode="fixed" />

    <android.support.v4.view.ViewPager
        android:id="@+id/attachment_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

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

3 个答案:

答案 0 :(得分:6)

对我来说,使用 dialog.window.decorView 的解决方案出现在 Android 的软导航键上。相反,我将 Snackbar 的高度改为大于 BottomSheetDialog 的高度。

这使 Snackbar 保持在 y 轴上的正确位置,新的高度使其位于底部工作表上方:

Snackbar.make(binding.root, "Example", Snackbar.LENGTH_LONG)
    .apply {
        view.elevation = 1000F
    }.show()

答案 1 :(得分:3)

这是一个较晚的答案,但可能会对其他人有所帮助。 如果您使用的是DialogBottomSheetDialog,则可以显示Snackbar,以提供顶级窗口装饰视图。

这是我在科特林中的解决方案:

    Snackbar.make(
            dialog.window.decorView,                   // important part
            "your-string",
            Snackbar.LENGTH_SHORT
    ).show()

答案 2 :(得分:0)

Snackbar.make(
                dialog.window.decorView,                   
                "your-string",
                Snackbar.LENGTH_SHORT
        ).show()

还向 SnackBar 添加锚视图(您可以在布局中的根视图底部添加视图,并将其用作 SnackBar 中的锚视图)

例如

snackbar.setAnchorView(your_view_here)