web-dev-qa-db-ja.com

DrawerLayoutをActionBar上でスライドさせる

アクティビティにスライド式の引き出しメニューがあり、その上にいくつかのタブがあるアクションバーがあります。

スライド式引き出しをタブの下ではなくタブの上をスライドさせたいのですが。

これが今の様子です...

Sliding menu under action bar tabs

これをどのように行うことができるかについてのアイデアはありますか?

注:ここでいくつかの規則とUIパターンを壊している可能性があることを理解しています。まったく機能しない場合は、代替案を検討します。しかし、最初にこれを機能させたいと思います。

編集:必要なことを正確に行うGoogle Playミュージックアプリの以下のスクリーンショットを参照してください。以下の@CommonsWareの回答を参照してください。彼は、私が慣例に違反している可能性があることに同意しています。しかし、Play Musicアプリを考えれば、それもまったく珍しいことではないかもしれません。

Proper navigation with tabs sliding correctly

25
Archit

これをどのように行うことができるかについてのアイデアはありますか?

次のいずれかを実行します。

  • アクションバーのタブから、おそらくViewPagerとタブ付きインジケーター(ViewPageIndicatorのPagerTabStripTabPageIndicator)から切り替えます。

  • 既存のサードパーティ製ドロワーの実装が新しいUI標準にまだ更新されていないかどうかを確認します

  • DrawerLayoutをフォークし、それに合わせて変更します

  • 独自のナビゲーションドロワーをゼロから転がす

私はここでいくつかの規則とUIパターンを壊しているかもしれないことを理解しています

正しい

11
CommonsWare

以下のライブラリを使用して、Google Playミュージックアプリに似たナビゲーションモデルを取得できます。

  • ActionBarSherlock(github)
  • ネストされたフラグメント(github)
  • PagerSlidingTabStrip(github)
  • NavigationDrawer(Android開発者サイト)
  • 最新のサポートv4ライブラリ

プロジェクトを作成しました Navigation Drawer with Tab Strip Example githubで、ご覧ください。

以下はそのスクリーンショットです。

Navigation-drawer-page-sliding-tab-strip

22
Balaji

このライブラリもチェックしてください http://www.androidviews.net/2013/04/pager-sliding-tabstrip/ 男は素晴らしい仕事をしました。ナビゲーションドロワーで使用でき、完全に機能します。

3
alecnash

最後に、このブログのスライドタブ上のナビゲーションドロワーを実現するためのクリーンな方法 http://www.paulusworld.com/technical/Android-navigationdrawer-sliding-tabs

3
user2814778

これは、サードパーティのライブラリなしで実行できます。 Googleのスライドタブのサンプルをご覧ください

     SlidingTabsBasic:   http://developer.Android.com/samples/SlidingTabsBasic/project.html
     SlidingTabsColors:  http://developer.Android.com/samples/SlidingTabsColors/project.html

また、この素晴らしいリンクをチェックしてください: http://manishkpr.webheavens.com/Android-sliding-tabs-example/ 私にとって魅力のように働いた。 :)

1
user3316561

Actionbar Navigaton DrawerとSwipeTabsは同時に使用できません。シンプルなタブホストによるアクションバーとスワイプタブを使用してナビゲーションドロワーを実装する必要があります。タブにはTabhostを使用し、各タブの内部ビューにはフラグメントを使用できます。フラグメントをビューページャー経由で使用して、スクロール/スワイプ効果を提供する必要があります。メソッドを使用してタブとビューページャーを互いに接続する

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >

<TabHost
    Android:id="@+id/tabHost"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" >

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical" >

        <HorizontalScrollView
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:fillViewport="true"
            Android:scrollbars="none" >

            <TabWidget
                Android:id="@Android:id/tabs"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content" >
            </TabWidget>
        </HorizontalScrollView>

        <FrameLayout
            Android:id="@Android:id/tabcontent"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent" >

            <Android.support.v4.view.ViewPager
                Android:id="@+id/viewPager_home"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent" />
        </FrameLayout>
    </LinearLayout>
</TabHost>
0
FAK

引き出しの断片内にタブを使用しています。私はこの問題を追加して解決します

_getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
_

onDrawerClosed()およびgetActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);メソッドのonDrawerOpend()で。

これがお役に立てば幸いです。

0
Jinal Rathod

Playミュージックは標準のActionBar.Tabを使用しません

0
tarn

OnDrawerClosedおよびonDrawerOpened関数内でnavigationModeを設定することにより、この要件を達成することができました。タブは実際にはすぐに消えないため、一時的な修正です。

  public void onDrawerClosed(View view) {
          getActionBar().setTitle(mTitle);
          if(getActionBar().getTabCount()>0) //Add tabs when the fragment has it
          getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);               
                        ...
                    }

   public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle(mDrawerTitle);
            getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);              
                    ..

                    }

タブのあるフラグメントとそれ以外のフラグメントがある場合、タブのないフラグメントのタブを作成することを忘れないでください。

 getActionBar().removeAllTabs();
0
user2814778

私は同じ問題を抱えていましたが、見つけた唯一の解決策は、内部フラグメント内で(fragmentActivityではなく)タブを使用することでした。それが最良の解決策であったかどうかはわかりません、私が抱えていた唯一の問題はこのタブをスタイリングすることでしたが、残りは完璧に動作します

0
xgc1986