personalizar - Android DrawerLayout no muestra el icono del indicador correcto
navigationview (4)
Estoy tratando de usar el nuevo DrawerLayout para una lista. El problema es que aunque configuré el detector de cajón, el indicador en la barra de acción sigue siendo el ícono de flecha en lugar del ícono de 3 líneas que pretendo dibujar. La siguiente es la función OnCreate:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_front_page);
// Swiping Pager set up
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
// Sliding Drawer set up
mHabitContract = new HabitsContract(this);
mDrawerLayout = (DrawerLayout) findViewById(R.id.front_page_layout);
mDrawerList = (ListView) findViewById(R.id.habit_list);
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
mDrawerList.setAdapter(new HabitAdapter(mHabitContract.GetHabitItems(), this));
// Fixme: Indicator image doesn''t show up
mDrawerToggle = new ActionBarDrawerToggle(
this, /* host Activity */
mDrawerLayout, /* DrawerLayout object */
R.drawable.ic_navigation_drawer, /* nav drawer image to replace ''Up'' caret */
R.string.drawer_open, /* "open drawer" description for accessibility */
R.string.drawer_close /* "close drawer" description for accessibility */
) {
public void onDrawerClosed(View view) {
//getActionBar().setTitle(mTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
public void onDrawerOpened(View drawerView) {
//getActionBar().setTitle(mDrawerTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
// Action Bar set up
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayShowHomeEnabled(true);
}
¿Alguien puede ayudar?
Actualización: he encontrado el problema. Agregué la función onPostCreate de la siguiente manera, y ahora está funcionando.
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
El icono que está utilizando se llama "ic_navigation_drawer". Puede verificar si es la correcta porque el ícono que Google ofrece en la guía oficial ( http://developer.android.com/training/implementing-navigation/nav-drawer.html ) se llama "ic_drawer".
Para aquellos que están buscando esto o vinieron aquí en busca de una respuesta: deben usar DrawerToggle support.v7. Siguiendo como lo uso:
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_opened, R.string.drawer_closed){
public void onDrawerClosed(View view){
//actionBar.setTitle(mTitle);
invalidateOptionsMenu(); // crea la llamada para onPrepareOptionsMenu
}
public void onDrawerOpened(View view){
//actionBar.setTitle(mDrawerTitle);
invalidateOptionsMenu(); // crea la llamda para onPrepareOptionsMenu
}
};
Esto funciona bien y tiene una animación que mola!
También verifique cuidadosamente si el tema ActionBar
personalizado está definido en su proyecto en el archivo style.xml
con la condición android:displayOptions=showTitle
. Me gusta esto:
<style name="OrangeBar" parent="@android:style/Widget.Holo.ActionBar">
<item name="android:displayOptions">showTitle</item>
...
</style>
y puede estropear el indicador del cajón. Para evitar esto, agregue showHome
en android:displayOptions
:
<item name="android:displayOptions">showHome|showTitle</item>
syncState()
llamada syncState()
de su objeto onPostCreate()
desde onPostCreate()
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}