J'essaie de faire deux tiroirs de navigation dans mon application. Il est basé sur DrawerLayout Double Drawer (Left and Right Drawers simultaneously). Tout semble bien fonctionner en dehors de l'animation de la bascule du tiroir. Je le veux seulement pour le gauche et cela ne fonctionne que pour les deux ou aucun. Merci beaucoup!android deux animation de tiroir de navigation
Voici le 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);
}
Et voici le 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>
Voici le drawer.xml de navigation droite
<?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>
Et enfin le tiroir navigation gauche
<?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>
Merci beaucoup Mike! Cela a fonctionné parfaitement !! – danman