I'm trying to make two navigation drawers in my app. It is based on DrawerLayout Double Drawer (Left and Right Drawers simultaneously). Everything seems to work fine apart from the animation of the drawer toggle. I want it only for the left one and it only works for both or none of them. Thanks a lot!
Here's the code:
MainActivity (ProductsUI)
protected RecyclerView mProductsRecyclerView;
protected SearchView mSearchView;
protected ListView mRightDrawerView, mLeftDrawerView;
protected DrawerLayout mDrawerLayout;
protected ActionBarDrawerToggle mDrawerToggle;
@Override
protected void onCreate( Bundle savedInstanceState )
{
super.onCreate(savedInstanceState);
// Especificamos el layout 'products_grid.xml'
setContentView( R.layout.products_grid );
initActionBar();
initRecyclerView();
initNavigationDrawers();
}
private void initActionBar()
{
// Cargamos la action bar personalizada
getSupportActionBar().setDisplayOptions( ActionBar.DISPLAY_SHOW_CUSTOM );
getSupportActionBar().setCustomView(R.layout.action_bar);
// Cargamos el boton del left drawer
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
private void initNavigationDrawers()
{
mRightDrawerView = ( ListView )findViewById( R.id.rightlistviewdrawer );
mLeftDrawerView = ( ListView )findViewById( R.id.leftlistviewdrawer );
mDrawerLayout = ( DrawerLayout )findViewById( R.id.drawer_layout );
mRightDrawerView.setAdapter( menuAdapter );
mLeftDrawerView.setAdapter( menuAdapter );
initDrawerToggle();
mDrawerLayout.setDrawerListener( mDrawerToggle );
}
private void initDrawerToggle()
{
// Inicializamos el navigation drawer y el control en la action bar
mDrawerToggle = new ActionBarDrawerToggle( this, mDrawerLayout, R.string.open_drawer, R.string.close_drawer )
{
// Called when a drawer has settled in a completely closed state
@Override
public void onDrawerClosed( View drawerView )
{
if( drawerView.equals( mLeftDrawerView ) )
{
getSupportActionBar().setTitle( getTitle() );
supportInvalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
mDrawerToggle.syncState();
}
}
// Called when a drawer has settled in a completely open state
@Override
public void onDrawerOpened( View drawerView )
{
if( drawerView.equals( mLeftDrawerView ) )
{
getSupportActionBar().setTitle( getString( R.string.app_name ) );
supportInvalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
mDrawerToggle.syncState();
}
}
// Avoid normal indicator glyph behaviour. This is to avoid glyph movement when opening the right drawer
@Override
public void onDrawerSlide( View drawerView, float slideOffset )
{
if( drawerView == mLeftDrawerView ) // THIS DOES NOT WORK (neither with equals())
super.onDrawerSlide( drawerView, slideOffset );
}
};
}
@Override
protected void onPostCreate( Bundle savedInstanceState )
{
super.onPostCreate( savedInstanceState );
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged( Configuration newConfig )
{
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected( MenuItem item )
{
if ( mDrawerToggle.onOptionsItemSelected( item ) )
return true;
// Funcionamiento del right drawer
if ( item.getItemId() == R.id.right_drawer ) {
if ( mDrawerLayout.isDrawerOpen( Gravity.RIGHT ) )
mDrawerLayout.closeDrawer( Gravity.RIGHT );
else
mDrawerLayout.openDrawer( Gravity.RIGHT );
return true;
}
return super.onOptionsItemSelected( item );
}
And here's the products_grid.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ProductsUI"
android:background="@color/backgroundColorDark">
<android.support.v7.widget.RecyclerView
android:id="@+id/grid_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="20dp"
android:scrollbars="none"/>
</LinearLayout>
<include layout="@layout/right_navigation_drawer"/>
<include layout="@layout/left_navigation_drawer"/>
</android.support.v4.widget.DrawerLayout>
Here's the right navigation drawer.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:layout_gravity="end">
<ListView
android:id="@+id/rightlistviewdrawer"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:dividerHeight="0dp"
android:background="@color/backgroundColorDark"/>
</LinearLayout>
And finally the left navigation drawer
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:layout_gravity="start">
<ListView
android:id="@+id/leftlistviewdrawer"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:dividerHeight="0dp"
android:background="@color/backgroundColorDark"/>
</LinearLayout>