【问题标题】:Hide TabLayout on Scroll of Content instead of ToolBar在内容滚动而不是工具栏上隐藏 TabLayout
【发布时间】:2016-01-05 16:22:36
【问题描述】:

我想在滚动内容时隐藏 TabLayout。目前我在网上搜索,但我找到了隐藏工具栏的示例,但我想隐藏 TabLayout。所以请帮助我。我试过下面的代码。

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

    <android.support.design.widget.AppBarLayout
        android:id="@+id/id_appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true">

        <android.support.v7.widget.Toolbar
            android:id="@+id/id_toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways"/>

        <android.support.design.widget.TabLayout
            android:id="@+id/id_tabs"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize" 
            style="@style/MyCustomTabLayout"/>

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

    <android.support.v4.view.ViewPager
        android:id="@+id/id_viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

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

以下是示例应用程序: https://play.google.com/store/apps/details?id=com.contextlogic.wish https://play.google.com/store/apps/details?id=co.vine.android

【问题讨论】:

  • 您能否阐明您的目标:隐藏 Toolbar 和 TabLayout 或仅隐藏 TabLayout(并让 Toolbar 保持可见)?
  • 是的,没错。我想隐藏 Tab 并让 Toolbar 保持可见。

标签: android android-support-design


【解决方案1】:

试试这个方法。主要思想是将 Toolbar 移到 CoordinatorLayout 之外,并用其他容器布局包装这个视图结构。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/id_toolbar_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true">

        <android.support.v7.widget.Toolbar
            android:id="@+id/id_toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:layout_scrollFlags="scroll|exitUntilCollapsed" />
    </android.support.design.widget.AppBarLayout>

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/main_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/id_toolbar_container">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/id_appbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.design.widget.CollapsingToolbarLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_scrollFlags="scroll|enterAlways">

                <android.support.design.widget.TabLayout
                    android:id="@+id/id_tabs"
                    android:layout_width="match_parent"
                    android:layout_height="?attr/actionBarSize" />
            </android.support.design.widget.CollapsingToolbarLayout>

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

        <android.support.v4.view.ViewPager
            android:id="@+id/id_viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

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

【讨论】:

  • 标题是否在第一版?即在这些更改后它消失了?
  • 嘿抱歉,这很好用。我必须取消注释行 supportActionBar.SetDisplayShowTitleEnabled(false);
  • 感谢您的帮助,但现在我陷入了奇怪的境地。如何根据现有要求实现 NavigationDrawer。所以第一个导航项(fragment1)有选项卡,第二个导航项没有选项卡。所以请帮我解决这个问题。
  • 如果没有关于应用程序架构细节的信息(导航抽屉、活动、片段和适配器的互连),很难推荐最佳解决方案。看看这个article。希望对您有所帮助。
  • 感谢您的帮助。我会查看该链接,如果无效,我是否需要再问一个问题?
【解决方案2】:

在滚动动画时,CoordinatorLayout 开始以线性方式搜索 AppBarLayout 的所有子视图,并在找到与非滚动标签。

Exp1:

<CoordinatorLayout>
    <AppBarLayout>
         <layout1 with scrollFlag = "scroll|enterAlways">
         <layout2 with no scrollFlag>
    </AppBarLayout>
</CoordinatorLayout>

Only layout1 will have animation

Exp2:

<CoordinatorLayout>
    <AppBarLayout>
         <layout1 with no scrollFlag>
         <layout2 with scrollFlag = "scroll|enterAlways">
    </AppBarLayout>
</CoordinatorLayout>

None of them will have animation

Exp3:如果没有一个有scrollFlag,则没有一个会有动画

Exp4:如果两个都有scrollFlag,那么两个都会有动画


在您的情况下,您需要将工具栏保留在协调器布局之外,并使用 scrollFlags = "scroll|enterAlway" 将 tablayout 添加为 AppBarLayout 的子级

【讨论】:

    【解决方案3】:

    您好,您希望工具栏消失而标签页仍然显示,您必须编写下一段代码:

    <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll|enterAlways"
            ></android.support.v7.widget.Toolbar>
    

    如果你想隐藏 TabLayout,请在 TabLayout 块中使用 scrollFlags

    app:layout_scrollFlags="scroll|enterAlways"
    

    【讨论】:

    • 托尼,OP 想要的与你提供的相反。
    • 是的,只考虑我最后的评论
    【解决方案4】:

    您需要在布局中将Toolbar 移动为顶视图,并将其替换为View,这将占位先前的Toolbar 空间,并将像TabLayout 一样滚动,在您的AppBarLayout 内。

    这是您需要设置布局的方式。

    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/preview_top_parent"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"> 
    <android.support.design.widget.AppBarLayout...> 
    <android.support.v4.view.ViewPager...>    
    <android.support.v7.widget.Toolbar/>    <-!--- Toolbar is direct child of CooridnatorLayout and z-order above all views --!->
    </android.support.design.widget.CoordinatorLayout>
    

    这里是video

    【讨论】:

    • 请提供适当的演示,AppBarLayout 应该包含什么。
    • 请不要寻找复制粘贴解决方案。我在文中解释了。
    猜你喜欢
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    相关资源
    最近更新 更多