8

私は次のコードを持っています:

 <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から開始する必要があります。

助けていただければ幸いです。ありがとう!

4

2 に答える 2

8

私はついにこれを行う方法を見つけました。

onAttachedToWindowPagerTitleStripので、これは親がViewPagerであることを確認します。

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

したがって、これは行く必要があります。

解決:

独自のカスタムPagerTitleStrip/PagerTabStripを作成することで、これを解決しました。上記の動作を削除し、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);

ここで、mViewPager変数がnullであるonAttachedToWindowことを確認し、次のように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>

これは、概念の迅速で汚い証明にすぎません。これが誰かを助けることを願っています。

于 2013-11-26T16:39:16.197 に答える
-1
<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の左上(または位置0、0)で単に互いの上に追加されます。

于 2013-01-29T18:14:59.907 に答える