Lud*_*icL 15 android android-fragments android-viewpager
我无法得到我的ViewPager剪辑页面内容.
我目前使用ViewPager了FragmentStatePagerAdapter我的应用程序.我有3页,每页都显示不同的片段.一切正常,但现在我希望能够在我的页面边界之外绘制,如下图所示:

我设置clipChildren和clipToPadding对false我的所有视图父母需要他们的边界之外画,但这里是我得到的观点:我的观点得到根据页面边界裁剪.

一些额外的信息:为了解决这个问题,我曾经hierarchyviewer检查过我的视图层次结构,看看是否有一些"引擎盖下"视图可能有剪切行为.和宾果游戏:我的每个片段的根视图都添加到了一个NoSaveStateFrameLayout.我怀疑这个家伙会把孩子夹住......
你认为我的最后一个假设是否正确?如何获取未剪辑的页面?
Gra*_*mos 27
有一些不同的视图需要禁用剪辑.首先,位于ViewPager根目录的FrameLayout需要禁用剪辑.您可以在初始化视图寻呼机的任何地方执行此操作.您还需要将屏幕外页面限制设置为2,以允许在滑动期间加载额外的片段.如果没有这个,你会看到一个弹出从1-> 2作为3次加载,并在2加载完成后将其溢出内容添加到2(这会提前加载2和3).
mViewPager.setClipChildren(false);
mViewPager.setClipToPadding(false);
mViewPager.setOffscreenPageLimit(2);
Run Code Online (Sandbox Code Playgroud)
其次,您在FragmentStatePagerAdapter中膨胀的XML需要包含相应的标记,或者可以通过编程方式完成.最后,您需要强制NoSaveStateFrameLayout不要剪辑.这可以在onViewCreated中创建视图后完成.这是一个示例片段:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经测试了这个解决方案并确定它有效.
完整活动示例:https: //gist.github.com/grantamos/d664f01a30f9ad97ba53
| 归档时间: |
|
| 查看次数: |
6994 次 |
| 最近记录: |