gpt4 book ai didi

android - 不要剪辑 ViewPager 页面

转载 作者:IT老高 更新时间:2023-10-28 23:41:05 25 4
gpt4 key购买 nike

我无法让我的 ViewPager 不剪切其页面内容。

我目前在我的应用程序中使用带有 FragmentStatePagerAdapterViewPager。我有 3 页,每页显示不同的 fragment 。一切正常,但现在我希望能够在我的页面范围之外进行绘制,如下图所示:

What I Want

我在我的所有 View 中将 clipChildrenclipToPadding 设置为 false 到需要在其范围之外绘制的 View ,但这就是我明白了:我的 View 会根据页面边界被剪裁。

What I get

一些附加信息:为了解决这个问题,我使用 hierarchyviewer 来检查我的 View 层次结构并查看某些“幕后” View 是否可能具有剪切行为。还有宾果游戏:我的每个 fragment 的 Root View 都添加在 NoSaveStateFrameLayout 下。我怀疑这家伙夹它的 child ...

您认为我的最后一个假设是否正确?您将如何获得未剪辑的页面?

最佳答案

有一些不同的 View 需要禁用剪辑。首先,位于 ViewPager 根目录的 FrameLayout 需要禁用剪辑。您可以在初始化 View 寻呼机的任何地方执行此操作。您还需要将屏幕外页面限制设置为 2,以允许在滑动期间加载额外的 fragment 。没有这个,你会看到一个从 1->2 加载 3 的弹出窗口,并在 2 完成加载后将其溢出内容添加到 2(这会提前加载 2 和 3)。

mViewPager.setClipChildren(false);
mViewPager.setClipToPadding(false);
mViewPager.setOffscreenPageLimit(2);

其次,您在 FragmentStatePagerAdapter 中扩展的 XML 需要包含适当的标签,或者可以通过编程方式完成。最后,您还需要强制 NoSaveStateFrameLayout 不进行剪辑。这可以在 onViewCreated 中创建 View 之后完成。这是一个示例 fragment :

public static class PlaceholderFragment extends Fragment {

public static PlaceholderFragment newInstance() {
PlaceholderFragment fragment = new PlaceholderFragment();
return fragment;
}

public PlaceholderFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
LinearLayout rootView = (LinearLayout) inflater.inflate(R.layout.fragment_main, container, false);
//This can be done in XML
rootView.setClipChildren(false);
rootView.setClipToPadding(false);
return rootView;
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

//This is the NoSaveStateFrameLayout - force it to not clip
FrameLayout frameLayout = (FrameLayout) getView();
frameLayout.setClipChildren(false);
frameLayout.setClipToPadding(false);
}
}

我已经测试过这个解决方案并且确信它有效。

完整的 Activity 示例: https://gist.github.com/grantamos/d664f01a30f9ad97ba53

关于android - 不要剪辑 ViewPager 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21819770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com