Estoy implementando el cajón de navegación estilo lollipop con la última biblioteca de soporte de appcompat, pero el problema es que el icono de hamburguesa nunca se muestra. Solo se muestra el icono de retroceso.
Este es mi código de actividad
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.view.View;
public class Home extends ActionBarActivity {
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
initViews();
}
private void initViews(){
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
toolbar.setTitleTextColor(getResources().getColor(android.R.color.white));
setSupportActionBar(toolbar);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,toolbar , R.string.drawer_open, R.string.drawer_close) {
/** Called when a drawer has settled in a completely closed state. */
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
//getActionBar().setTitle(mTitle);
//invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
/** Called when a drawer has settled in a completely open state. */
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
//getActionBar().setTitle(mDrawerTitle);
//invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
// Set the drawer toggle as the DrawerListener
mDrawerLayout.setDrawerListener(mDrawerToggle);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
}
Este es mi archivo de estilos
<resources>
<!-- Application theme. -->
<style name="Theme.Test" parent="@style/Theme.AppCompat.Light">
<!-- customize the color palette -->
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
<item name="windowActionBar">false</item>
<item name="drawerArrowStyle">@style/Theme.Test.DrawerArrowStyle</item>
</style>
<style name="Theme.Test.DrawerArrowStyle" parent="@style/Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">true</item>
<item name="color">@android:color/white</item>
</style>
El archivo de diseño
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/toolbar">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#111"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
</RelativeLayout>
En ambos casos, solo se muestra la flecha hacia atrás, he leído muchas publicaciones pero nada parece marcar la diferencia. Cualquier ayuda sería apreciada.
ActionBarDrawerToggle
mDrawerToggl.syncState()
realidad, estoy mostrando el cajón de navegación superpuesto en la barra de herramientas, por lo que la animación no es necesaria en mi caso.Asegúrese de que está importando la palanca de cajón correcta.
Cuando importé la versión v4, tenía la flecha (abajo).
Cambiarlo a esto (a continuación, v7) solucionó mi problema.
fuente
Asegúrate de llamar
mDrawerToggle.syncState();
DESPUÉS de llamar
fuente
Cuando use ActionBarDrawerToggle, debe llamarlo durante onPostCreate () y onConfigurationChanged ()
fuente
onOptionsItemSelected
tambien.Dado que mi NavigationDrawer estaba extendiendo un Fragmento, no una Actividad, no pude anular postCreate. Lo siguiente es lo que hice.
¡Espero eso ayude!
fuente
No olvide anular el método onOptionsItemSelected y verificar si se hizo clic en ctionBarDrawerToggle, en este caso, devuelva verdadero, de lo contrario, la actividad finalizará.
fuente
return actionBarDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item)
Simplemente puede usar esto:
fuente
Mientras incluye ActionBarDrawerToggle, asegúrese de utilizar el método de publicación:
fuente
setHomeAsUpIndicator(R.drawable.ic_menu/ic_back)
eso fue forzar el ícono que se pretendía al cambiar entre fragmentos. Pero después de actualizarse al nuevo ícono de hamburguesa animado, eso no funciona.mDrawerToggle.syncState()
no funcionó para mí, pero finalmente logré que funcionara con:Sin embargo, no estaba usando una barra de herramientas.
fuente
También tuve un problema similar, en mi caso el problema fue que, al iniciar actionbartoggle, no pasaba un argumento válido de la barra de herramientas (la barra de herramientas se inicializó más tarde), sin una barra de herramientas adecuada y no nula, ActionBarToggle no podrá crear un icono de hamburguesa.
fuente
puede llamar a syncState () desde onPostCreate de su actividad para sincronizar el indicador con el estado del DrawerLayout vinculado después de que se haya producido onRestoreInstanceState.
Además, ActionBarDrawerToggle se puede usar directamente como DrawerLayout.DrawerListener, o si ya está proporcionando su propio oyente, llame a cada uno de los métodos de escucha desde el suyo.
fuente
El cajón de navegación no se mostraba al hacer clic en el menú de la barra de acciones. Esto me lo arregló.
fuente
Esto funciona para mi. He extendido AppCompatActivity en lugar de ActionBarActivity.
fuente