我已在 DrawerLayout 中实施了 ViewPager ,但它正常工作,但抽屉菜单列表视图无法正确显示,它将显示在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>
答案 0 :(得分:4)
抽屉布局是视图寻呼机的父级。试试这个
<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>
答案 1 :(得分:2)
这是抽屉用操作栏标签的行为。你无法改变它。
在此答案中查找一些官方信息:Android Navigation Drawer over the tabs
这个答案的解决方法:Getting DrawerLayout to Slide over the ActionBar
我会考虑使用这个很棒的库:PagerSlidingTabStrip
答案 2 :(得分:1)
我不确定Action Bar标签,但您可以将Pager Tab Strip与导航抽屉结合使用,以获得类似Google Play音乐的导航模型,看看my post
答案 3 :(得分:0)
您的XML不正确。
ListView
应将layout_height
设置为match_parent
而不是wrap_content
。
编辑:
DrawerLayout
也应该是顶级而不是被挤进LinearLayout
。
查看有关如何使用DrawerLayout
:http://developer.android.com/training/implementing-navigation/nav-drawer.html
答案 4 :(得分:0)
你使用过FrameLayout吗?最后一个FrameLayout上显示的内容将显示在顶部。你隐藏那个“图层”和FrameLayout“下面”它(最后一个FrameLayout之前的FrameLayout)将会显示出来。在DrawerLayout中,抽屉列表应位于倒数第二个的最后一个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>
答案 5 :(得分:0)
要在工具栏正下方显示抽屉布局,请使用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>