android - 不要剪辑 ViewPager 页面

标签 android android-fragments android-viewpager

我无法让我的 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/

相关文章:

java - Fresco 未更新图像

java - android:使用库内部项目的最终静态变量,或其他一些技巧来排除未使用的代码

android - 抽屉导航 + 工具栏 Lollipop 菜单无响应

android - 为 ViewPager 实现 onClickListener

android:admob InterstitialAd 在 loadAd 时崩溃

Android 从最近不工作中排除

java - 为每个选项卡 fragment 动态生成不同的内容(来自 JSON)

java - 如何制作改变应用程序语言的微调器(在 fragment 中)?

android - 为什么每当我翻阅我的应用程序 viewPager 时,我的 fragment onCreate 都会被广泛调用?

android - 如何在 ViewPager : 中重新创建所有 fragment