Android的DrawerLayout不能使用ViewPager?

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

在这里输入图像说明

我如何显示抽屉菜单列表视图下面的行动栏?

我曾试过。

Activity 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> 

Solutions Collecting From Web of "Android的DrawerLayout不能使用ViewPager?"

这是抽屉与行为栏选项卡的行为。 你不能改变它。

在这个答案find一些官方信息: Android导航抽屉在选项卡上

在这个答案和解决方法: 获取DrawerLayout滑过的ActionBar

我会考虑使用这个伟大的图书馆: PagerSlidingTabStrip

抽屉布局是视图传呼机的父母。 尝试这个

 <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> 

我不确定操作栏选项卡,但您可以使用导航抽屉组合的导航栏选项卡带来获得像Google Play音乐类似的导航模型,看看我的文章

你的XML不正确。

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

编辑:

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

你用过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> 

要在工具栏下方显示抽屉布局,请在activity_main.xml中使用code-below

 <?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>