ViewPager中的部分片段在屏幕底部被截断(Android)

我为我的视图定义了一个基本的协调器布局:

       

我的视图分页器中有多个选项卡。 我发布了一个简单的片段:

   

会发生什么是FAB离开屏幕。 它不是FAB,但其他具有cardviews / listview的片段在屏幕底部被截断。 我四处寻找解决方案,并提出了一个hacky解决方案: 从工具栏中删除属性app:layout_scrollFlags =“scroll | enterAlways”

我无法理解可能导致这种情况发生的原因,以及如何解决上述问题解决了这个问题。 它是支持库中的一些错误吗? 有没有更好的方法来解决这个问题? 我遇到的另一个解决方案是从这里开始 – 将FAB按钮直接保持在活动中的Coordinator布局下,并使其仅在您需要的片段中可见。 对我来说似乎不是一个好的解决方案。 此外,我片段中的其他观点也被切断了。

Solutions Collecting From Web of "ViewPager中的部分片段在屏幕底部被截断(Android)"

这是因为您正在使用带有ListView CoordinatorLayout 。 您可以将实现更改为RecyclerView以实现正确的滚动。

在这里查看我的答案。 这可能对你有所帮助。

我已经通过更改工具栏app:layout_scrollFlags="scroll|enterAlways"修复了这个问题app:layout_scrollFlags="scroll|enterAlways"属性只是app:layout_scrollFlags="enterAlways"

我有一个类似于你的布局:带有工具栏的活动从顶部和标签。 片段的要求是拥有自己独立的FAB。

我无法直接在xml中处理它,所以我就这样钉了它:

活动布局

       

片段布局:

    

还有一些代码可以使FAB保持原样。 片段onCreateView:

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View rootView = inflater.inflate(R.layout.fragment_tabs2, container, false); final FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.fab); final TabLayout tabLayout = (TabLayout) getActivity().findViewById(R.id.tabs); final AppBarLayout appBarLayout = (AppBarLayout) getActivity().findViewById(R.id.appbar); appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { int maxAbsOffset = appBarLayout.getMeasuredHeight() - tabLayout.getMeasuredHeight(); fab.setTranslationY(-maxAbsOffset - verticalOffset); } }); return rootView; } 

从工具栏layout_scrollFlags属性中删除滚动。 你应该有这样的东西: app:layout_scrollFlags="enterAlways|enterAlwaysCollapsed"

这个问题有两个解决方案:

  • 您可以从app:layout_scrollFlags删除工具栏的scroll app:layout_scrollFlags (例如app:layout_scrollFlags="enterAlways" )或删除整个app:layout_scrollFlags
  • 如果需要scroll属性,则主布局内容/片段必须使用RecyclerViewNestedScrollView

https://code.luasoftware.com/tutorials/android/bottom-of-fragment-in-viewpager-out-of-screen/