Android 防止FloatingAction按钮在ViewPager中滚动

Android 防止FloatingAction按钮在ViewPager中滚动,android,android-layout,Android,Android Layout,我有一个ViewPager,其中一个页面有一个floatingAction按钮。工具栏使用带有滚动的坐标布局| enterally,因此它会随着用户滚动而消失 这会导致FloatingAction按钮最初不可见,并随着用户滚动和工具栏消失而滚动到视图中 其目的是使晶圆厂始终固定在屏幕上。一个骇人的想法是将其移动到包含ViewPager的布局中,但我只希望它位于一个页面上 以下是顶层布局: <android.support.design.widget.CoordinatorLayout

我有一个ViewPager,其中一个页面有一个floatingAction按钮。工具栏使用带有
滚动的坐标布局| enterally
,因此它会随着用户滚动而消失

这会导致FloatingAction按钮最初不可见,并随着用户滚动和工具栏消失而滚动到视图中

其目的是使晶圆厂始终固定在屏幕上。一个骇人的想法是将其移动到包含ViewPager的布局中,但我只希望它位于一个页面上

以下是顶层布局:

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    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:layout_height="wrap_content"
        android:layout_width="match_parent">

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

        <android.support.design.widget.TabLayout
            android:id="@+id/tabLayout"
            android:background="@color/primary"
            app:layout_scrollFlags="scroll|enterAlways"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

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

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

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

非常简单-一个滚动到看不见的地方(向上滚动时立即返回)的工具栏和一个视图寻呼机

以下是ViewPager页面的相关布局:

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

    <android.support.v7.widget.RecyclerView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="16dp"
        android:src="@drawable/ic_add_black_48dp"
        app:fabSize="normal"
        android:id="@+id/add" />
</FrameLayout>


我尝试了一些随机的愚蠢行为,比如
app:layout\u scrollFlags=“”
app:layout\u behavior=“android.support.design.widget.FloatingActionButton.behavior”
,但这些都没有帮助-我想问题是框架布局的大小覆盖了整个屏幕,没有工具栏。解决这个问题的最佳方法是什么?

晚了一年,但也许这会帮助其他正在寻找答案的人

您应该将FAB声明移动到ViewPager下面的CoordinatorLayout中,就像您建议的那样。然后,在主活动类上,在
onCreate
方法中,向ViewPager实例添加一个
OnPageChangeListener

例如:

fab = (FloatingActionButton) findViewById(R.id.add);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        //positions 0, 1, 2 = first tab, second tab, third tab respectively            
        if (position == 0 && positionOffset == 0)
            fab.show();
        else
            fab.hide();
    }

    @Override
    public void onPageSelected(int position) {

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
});

将晶圆厂放在查看寻呼机之外。通过回调或依赖项注入在查看寻呼机片段中请求它。根据当前片段显示/隐藏或更改其外观。@EugenPechanec绝对是一个可行的选择。我希望有其他的东西,因为我不想让晶圆厂的逻辑传播到页面之外,但除非有人有更聪明的想法,否则这就是我必须接受的。我知道你的痛苦,也有同样的问题。如果你看规格,晶圆厂总是停留在一个地方,并根据不断变化的碎片变形的背景和图像。这不是谷歌地图中的情况(有多个晶圆厂),所以这取决于个人的需要。@EugenPechanec-Bah,我想这是一条简单的道路,我最终以这种方式实现了它。请随意写一个正确的答案,这样我就可以给你25分了!