Android DrawerLayout не работает с ViewPager?
Я реализовал ViewPager внутри DrawerLayout, он работает правильно, но вид списка меню ящика не отображается должным образом с панелью действий, которая будет отображаться под вкладками ViewPager. фигура даст вам представление.
И я использую библиотеку actionbarsherlock.
![enter image description here]()
Как я могу отобразить представление списка меню ящика под панелью действий?
Что я пробовал.
Активность 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 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>
Ответы
Ответ 1
Это поведение ящика с вкладками панели действий. Вы не можете его изменить.
Найдите официальную информацию в этом ответе: Android-навигатор по вкладкам
И обходные пути в этом ответе: Получение DrawerLayout для перемещения по ActionBar
Я бы подумал об использовании этой большой библиотеки: PagerSlidingTabStrip
Ответ 2
Макет ящика - родительский элемент пейджера представления. попробуйте это
<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>
Ответ 3
Я не уверен в закладках Action Bar, но вы можете использовать Pager Tab Strip в сочетании с навигационным ящиком, чтобы получить аналогичную навигационную модель, например, в Google Play Музыке, посмотрите мой пост
Ответ 4
Ваш XML неверен.
ListView
должен установить layout_height
в match_parent
вместо wrap_content
.
EDIT:
также DrawerLayout
должен быть пустым, а не быть сжатым в LinearLayout
.
Проверьте документацию по использованию DrawerLayout
: http://developer.android.com/training/implementing-navigation/nav-drawer.html
Ответ 5
Вы использовали 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>
Ответ 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>