如何以编程方式显示/隐藏 BottomAppBar?

Posted

技术标签:

【中文标题】如何以编程方式显示/隐藏 BottomAppBar?【英文标题】:How to show/hide BottomAppBar programmatically? 【发布时间】:2018-12-29 13:53:19 【问题描述】:

我尝试使用 BottomAppBar,我希望能够像 AppBarLayout 中的 setExpanded 一样以编程方式隐藏或显示它。

我的布局是这样的

<androidx.coordinatorlayout.widget.CoordinatorLayout
    android:id="@+id/coordinator"
    android:layout_
    android:layout_>

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

    <androidx.core.widget.NestedScrollView
        android:id="@+id/nested"
        android:layout_
        android:layout_
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <fragment
            android:id="@+id/navHost"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_
            android:layout_
            app:defaultNavHost="true"
            app:navGraph="@navigation/home_nav" />
    </androidx.core.widget.NestedScrollView>

    <com.google.android.material.bottomappbar.BottomAppBar
        android:id="@+id/bottomAppBar"
        style="@style/Widget.MaterialComponents.BottomAppBar"
        android:layout_
        android:layout_
        android:layout_gravity="bottom"
        app:backgroundTint="@color/colorPrimary"
        app:fabAlignmentMode="center"
        app:hideOnScroll="true"
        app:layout_scrollFlags="scroll|enterAlways"
        app:navigationIcon="@drawable/ic_menu"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

我尝试使用 AppBottomBar 的行为,但它不起作用。

【问题讨论】:

【参考方案1】:

您可以使用其行为类中的slideUp(...)slideDown(...) 方法。例如:

科特林

 val bottomAppBar = ...
 val behavior = bottomAppBar.behavior as HideBottomViewOnScrollBehavior
 behavior.slideDown(bottomAppBar) // use this to hide it
 behavior.slideUp(bottomAppBar) // use this to show it

Java

 BottomAppBar bottomAppBar = ...
 HideBottomViewOnScrollBehavior behavior = (HideBottomViewOnScrollBehavior) bottomAppBar.behavior;
 behavior.slideDown(bottomAppBar) // use this to hide it
 behavior.slideUp(bottomAppBar) // use this to show it

【讨论】:

HideBottomViewOnScrollBehavior slideUp/Down 被“保护”【参考方案2】:

调用底部应用栏上的performShow()performHide() 即可满足您的需求。

【讨论】:

谢谢,它已经随 1.1.0 一起发布了。【参考方案3】:

科特林

class HideBottomNavigationOnScrollBehavior<V : View>(
        context: Context?,
        attrs: AttributeSet?
) : HideBottomViewOnScrollBehavior<V>(context, attrs) 

    public override fun slideDown(child: V) 
        super.slideDown(child)
    

    public override fun slideUp(child: V) 
        super.slideUp(child)
       

【讨论】:

以上是关于如何以编程方式显示/隐藏 BottomAppBar?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式显示/隐藏导航抽屉

当导航到可组合时,我们如何隐藏 BottomAppBar(包含导航)?

如何通过单击事件以编程方式显示/隐藏操作栏项目

如何以编程方式在 iOS 13 中隐藏和显示状态栏?

如何以编程方式确定 Windows 任务栏是不是隐藏?

jQuery:如何以编程方式隐藏 TableTools 按钮