在ViewPager中的PagerTabStrip位置

我有以下代码:

<android.support.v4.view.ViewPager android:id="@+id/main_pager" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.PagerTabStrip android:id="@+id/pager_tab_strip" android:layout_width="match_parent" android:layout_height="wrap_content" /> </android.support.v4.view.ViewPager> 

一切都得到了应有的地位。

我现在想要的是, PagerTabStrip覆盖ViewPager

它应该在顶部呈现,而不占用任何布局空间。 基本上,ViewPager中的片段应该像PagerTabStrip所做的那样从0,0开始。

任何帮助赞赏。 谢谢!

Solutions Collecting From Web of "在ViewPager中的PagerTabStrip位置"

我终于find了一个方法来做到这一点。

onAttachedToWindow的onAttachedToWindow中,这将检查父级是一个ViewPager:

 final ViewParent parent = getParent(); if (!(parent instanceof ViewPager)) { throw new IllegalStateException("PagerTitleStrip must be a direct child of a ViewPager."); } 

因此,这需要去。

解:

我现在通过创build自己的自定义PagerTitleStrip / PagerTabStrip来解决它。 我删除了上述行为,并将其replace为指向ViewPager的PagerTitleStrip的可定制属性。 这在values / attrs.xml中是这样定义的:

 <declare-styleable name="PagerTitleStripCustom"> <attr name="parentViewPager" format="reference" /> </declare-styleable> 

并阅读像这样的PagerTitleStrip构造函数:

 TypedArray types = context.obtainStyledAttributes(attrs,R.styleable.PagerTitleStripCustom, 0, 0); pagerID = types.getResourceId(R.styleable.PagerTitleStripCustom_parentViewPager, 0); 

onAttachedToWindow我们现在可以检查mViewPagervariables为空,并将其分配给我们的pagerID,如下所示:

 @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); final ViewParent parent = getParent(); ViewPager pager = null; if (pagerID != 0) { View test2 = ((View) parent).findViewById(pagerID); pager = (ViewPager) test2; } else if (pagerID == 0 && (parent instanceof ViewPager)) { pager = (ViewPager) parent; } else if (pagerID == 0 && !(parent instanceof ViewPager)) { throw new IllegalStateException("PagerTitleStrip is neither a direct child of a ViewPager nor did you assign the ID of the ViewPager."); } else { throw new IllegalStateException("PagerTitleStrip: Something went completely wrong."); } final PagerAdapter adapter = pager.getAdapter(); pager.setInternalPageChangeListener(mPageListener); pager.setOnAdapterChangeListener(mPageListener); mPager = pager; updateAdapter(mWatchingAdapter != null ? mWatchingAdapter.get() : null, adapter); } 

现在,PagerTitleStrip / PagerTabStrip控件可以像这样在布局中自由定位:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:custom="http://schemas.android.com/apk/res/com.YOUR.PATH" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/main_pager" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.v4.view.PagerTabStripCustom android:layout_width="match_parent" android:layout_height="wrap_content" custom:parentViewPager="@id/main_pager" /> </RelativeLayout> 

这只是概念的快速和肮脏的certificate。 希望这有助于某人。

 <RelativeLayout android:id="@+id/view_pager_container android:layout_width="match_parent" android:layout_height="wrap_content" > <android.support.v4.view.ViewPager android:id="@+id/main_pager" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.PagerTabStrip android:id="@+id/pager_tab_strip" android:layout_width="match_parent" android:layout_height="wrap_content" /> </android.support.v4.view.ViewPager> </RelativeLayout> 

当使用RelativeLayout的时候,如果你不指定添加视图的位置,那么在RelativeLayout的左上angular(或者位置0,0),视图只是相互叠加。