【问题标题】:Android DrawerLayout is not working with ViewPager?Android DrawerLayout 不能与 ViewPager 一起使用?
【发布时间】:2013-06-06 06:00:09
【问题描述】:

我已经在 DrawerLayout 中实现了 ViewPager,它工作正常,但 Drawer 菜单列表视图无法正确显示操作栏,它将显示在 ViewPager 选项卡下方。希望以下图会给你一个想法。 我正在使用 actionbarsherlock 库。

如何在操作栏正下方显示抽屉菜单列表视图??

我尝试过的。

活动 OnCreate():

        setContentView(R.layout.activity_layout);
        mDrawerLayout   = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList     = (ListView) findViewById(R.id.left_drawer);
        mLinearLayout   = (LinearLayout)findViewById(R.id.ll_viewpager_layout);

        // set a custom shadow that overlays the main content when the drawer opens
        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
        // set up the drawer's list view with items and click listener

        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

        mDrawerToggle = new ActionBarDrawerToggle(
                this,                  /* host Activity */
                mDrawerLayout,         /* DrawerLayout object */
                R.drawable.ic_drawer,  /* nav drawer image to replace 'Up' caret */
                R.string.app_name,  /* "open drawer" description for accessibility */
                R.string.app_you  /* "close drawer" description for accessibility */
                ) {
            public void onDrawerClosed(View view) {
            }

            public void onDrawerOpened(View drawerView) {
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);
        invalidateMenuItems();

        mViewPager = new ViewPager(this);
        mViewPager.setOnPageChangeListener(this);
        mViewPager.setId(1);
        mViewPager.setOffscreenPageLimit(7);

        mLinearLayout.addView(mViewPager);

        mTabsAdapter = new TabsAdapter(this, mViewPager,mActionBar);

        mTabsAdapter.addTab(mActionBar.newTab().setText("Fragment"),Fragment.class, null);

        mTabsAdapter.addTab(mActionBar.newTab().setText("Fragment"),Fragment.class, null);

        mTabsAdapter.addTab(mActionBar.newTab().setText("Fragment"),Fragment.class, null);

        mTabsAdapter.addTab(mActionBar.newTab().setText("Fragment"),Fragment.class, null);

活动布局xml:

 <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

                <LinearLayout
            android:id="@+id/ll_dashboard_viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" />

        <ListView
            android:id="@+id/left_drawer"
            android:layout_width="200dip"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:background="@color/abs__background_holo_light"
            android:cacheColorHint="#00000000"
            android:choiceMode="singleChoice"
            android:dividerHeight="1dip" />


    </android.support.v4.widget.DrawerLayout>

【问题讨论】:

    标签: android actionbarsherlock android-viewpager drawerlayout


    【解决方案1】:

    抽屉布局是视图分页器的父级。试试这个

    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <android.support.v4.view.ViewPager
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        </android.support.v4.view.ViewPager>
    
        <!-- Framelayout to display Fragments -->
    
        <FrameLayout
            android:id="@+id/frame_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
        <!-- Listview to display slider menu -->
    
        <ListView
            android:id="@+id/list_slidermenu"
            android:layout_width="240dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:background="@color/list_background"
            android:choiceMode="singleChoice"
            android:divider="@color/list_divider"
            android:dividerHeight="1dp"
            android:listSelector="@drawable/list_selector" />
    
    </android.support.v4.widget.DrawerLayout>
    

    【讨论】:

      【解决方案2】:

      这是抽屉在 操作栏 选项卡上的行为。你不能改变它。

      在这个答案中找到一些官方信息:Android Navigation Drawer over the tabs

      以及此答案中的解决方法:Getting DrawerLayout to Slide over the ActionBar

      我会考虑使用这个很棒的库:PagerSlidingTabStrip

      【讨论】:

      • 谷歌游戏应用程序,如果您在抽屉中选择我的游戏,它将启动一个带有标签的视图寻呼机,并且抽屉出现在最上方。
      • 那些不是操作栏标签。
      • Google Play 游戏应用中的标签。
      • 郑重声明,Google 不希望您将操作栏与抽屉重叠。我从 Google 内部得到了这个回复,并且在 Navigation Drawer 文档中也有说明。 “随着导航抽屉的展开,它会覆盖内容而不是操作栏”来源:developer.android.com/design/patterns/navigation-drawer.html
      【解决方案3】:

      我不确定 Action Bar 选项卡,但您可以使用 Pager Tab Strip 结合 Navigation Drawer 来获得类似于 Google Play Music 的导航模型,看看my post

      【讨论】:

        【解决方案4】:

        您的 XML 不正确。

        ListView 应将layout_height 设置为match_parent 而不是wrap_content

        编辑:

        DrawerLayout 也应该是顶级的,而不是被挤进LinearLayout。 查看如何使用DrawerLayout的文档:http://developer.android.com/training/implementing-navigation/nav-drawer.html

        【讨论】:

        • 我已经按照您的建议使用更新的 xml 编辑了问题,但问题仍然存在。
        • @kaluwila 您是否尝试将 ViewPager 和 TabWidget 放入 LinearLayout 中的 XML 中?看看这里:thepseudocoder.wordpress.com/2011/10/13/…
        • @ Damian Walczak 我也试过你的方法,但什么也没发生 :(
        • @kaluwila 如果你能提供完整的示例代码,我可以看看。
        【解决方案5】:

        你用过FrameLayout吗?最后一个 FrameLayout 上显示的内容将显示在顶部。你隐藏那个“层”和它“下面”的 FrameLayout(最后一个 FrameLayout 之前的 FrameLayout)会显示出来。在你的 DrawerLayout 中,Drawer List 应该在最后一个 FrameLayout 和 Fragments 在倒数第二个,你可以在其中显示 ViewPager。

        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/main_parent_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >
        
            <android.support.v4.widget.DrawerLayout
                android:id="@+id/drawer_layout"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >
        
                <FrameLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >
        
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical"
                         >
        
                        <LinearLayout
                            android:id="@+id/content_frame"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_weight="9"
                            android:orientation="vertical" >
        
                            <!-- Fragments will attach in this container, and have ViewPager -->
                        </LinearLayout>
        
        
                    </LinearLayout>
                </FrameLayout>
        
        
                <!-- attach drawer -->
        
                <FrameLayout
                    android:id="@+id/drawer"
                    android:layout_width="300dp"
                    android:layout_height="match_parent"
                    android:layout_gravity="start"
                    android:background="@color/grey"
                    android:choiceMode="singleChoice"
                    android:clickable="true"
                    android:divider="@android:color/transparent"
                    android:dividerHeight="0dp" >
        
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="#00000000"
                        android:orientation="vertical" >
        
                            <ListView
                            android:id="@+id/navigation_drawer_list"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:choiceMode="singleChoice"
                            android:groupIndicator="@null" />
        
                        <!-- </LinearLayout> -->
                    </LinearLayout>
                </FrameLayout>
            </android.support.v4.widget.DrawerLayout>
        
        </LinearLayout>
        

        【讨论】:

          【解决方案6】:

          要在工具栏下方显示抽屉布局,请在您的 activity_main.xml 中使用以下代码

          <?xml version="1.0" encoding="utf-8"?>
          <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              xmlns:tools="http://schemas.android.com/tools"
              android:orientation="vertical"
              android:layout_height="match_parent"
              android:layout_width="match_parent"
              android:fitsSystemWindows="true">
          
                  <android.support.v7.widget.Toolbar
                  android:id="@+id/toolbar"
                  android:layout_width="match_parent"
                  android:layout_height="?attr/actionBarSize"
                  android:background="?attr/colorPrimary"
                  app:popupTheme="@style/AppTheme.PopupOverlay"/>
          
                  <android.support.v4.widget.DrawerLayout
                      android:id="@+id/drawer_layout"
                      android:layout_width="match_parent"
                      android:layout_height="match_parent"
                      tools:openDrawer="start">
          
                      <android.support.design.widget.NavigationView
                          android:id="@+id/navigation_view"
                          android:layout_width="wrap_content"
                          android:layout_height="match_parent"
                          android:layout_gravity="start"
                          android:fitsSystemWindows="true"
                          app:menu="@menu/activity_main_drawer" />
          
                  </android.support.v4.widget.DrawerLayout>
          
          </LinearLayout>  
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-07-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-25
            • 2016-07-19
            • 2015-11-20
            • 1970-01-01
            相关资源
            最近更新 更多