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