代码之家  ›  专栏  ›  技术社区  ›  Cheok Yan Cheng

当滑动到不同的viewpager页面[重复]时,如何使用layout\u scrollFlags使以前隐藏的工具栏再次可见

  •  9
  • Cheok Yan Cheng  · 技术社区  · 7 年前

    目前,我有以下页面与 ViewPager

    enter image description here

    当页面进入时 信息 选项卡被滚动,工具栏将被隐藏。这种行为是通过 CoordinatorLayout AppBarLayout app:layout_scrollFlags

    <?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"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
    
        <android.support.design.widget.AppBarLayout
            android:id="@+id/app_bar_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:elevation="0dp"
            android:elevation="0dp"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" >
    
            <android.support.v7.widget.Toolbar
                app:layout_scrollFlags="scroll|enterAlways|snap"
    
                android:id="@+id/toolbar"
                android:layout_height="wrap_content"
                android:layout_width="match_parent"
                android:minHeight="?attr/actionBarSize"
                android:background="@android:color/transparent"
                app:elevation="0dp"
                android:elevation="0dp"
                app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    
            <android.support.design.widget.TabLayout
                android:id="@+id/tab_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabIndicatorColor="?attr/detailedStockTabIndicatorColor" />
        </android.support.design.widget.AppBarLayout>
    
        <android.support.v4.view.ViewPager
            android:id="@+id/view_pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />
    
    </android.support.design.widget.CoordinatorLayout>
    

    enter image description here

    ,如果我滑动到 财务

    然后是刷卡

    enter image description here

    自,中的页面 财务 选项卡无法滚动,我们希望不要隐藏 Toolbar .

    layout_scrollFlags ,当滑动到不同 ViewPager

    5 回复  |  直到 3 年前
        1
  •  5
  •   Minato    5 年前

    你可以这样做:

    final AppBarLayout appBarLayout = view.findViewById(R.id.app_bar_layout);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    
            }
    
            @Override
            public void onPageSelected(int position) {
                if (position == 1)
                    appBarLayout.setExpanded(true, true);
            }
    
            @Override
            public void onPageScrollStateChanged(int state) {
    
            }
        });
    

    因此,当viewPager位于不可滚动页面时,它会展开并显示工具栏

        2
  •  2
  •   Linh    7 年前

    @Marzieh Heidari的答案是这个问题的正确答案,但我分享了我在项目中解决这个问题的不同方法。

    在内容较短的片段中,我仍然保留着 NestedScrollView

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v4.widget.NestedScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:isScrollContainer="false"
        >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            >
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="This fragment have short content"
                android:textSize="100sp"
                />
        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>
    

    希望有帮助

        3
  •  0
  •   Leo Muller    7 年前

    也许应用程序生命周期事件可以在这里帮助您,通过捕捉新屏幕的负载,并将工具栏设置为按编程方式显示?

        4
  •  0
  •   SiSa    7 年前

    mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    
        }
    
        @Override
        public void onPageSelected(int position) {
            if(position == 1) {
                appbar.setExpanded(true, true);
    
                AppBarLayout.LayoutParams params =
                        (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
                params.setScrollFlags(0);   // clear flags
                toolbar.setLayoutParams(params);
            } else {
                AppBarLayout.LayoutParams params =
                        (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
                params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
                        | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
                toolbar.setLayoutParams(params);
            }
        }
    
        @Override
        public void onPageScrollStateChanged(int state) {
    
        }
    });
    
        5
  •  0
  •   SANAT    7 年前

    你问了重复的问题。您的问题答案可用 here

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                expandToolbar();
            }
    
            @Override
            public void onPageSelected(int position) {
    
            }
    
            @Override
            public void onPageScrollStateChanged(int state) {
    
            }
        });
    
    public void expandToolbar(){
        AppBarLayout appBarLayout = (AppBarLayout)findViewById(R.id.app_bar_layout);
        appBarLayout.setExpanded(true, true);
    }