J'implémente le tiroir de navigation de style lollipop avec la dernière bibliothèque de support appcompat mais le problème est que l'icône hamburger n'est jamais affichée. Seule l'icône de retour est affichée.
Ceci est mon code d'activité
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);
}
}
Ceci est mon fichier de styles
<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>
Le fichier de mise en page
<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>
Dans les deux cas, seule la flèche arrière est affichée, j'ai lu de nombreux articles mais rien ne semble faire de différence. Toute aide serait appréciée.
ActionBarDrawerToggle
mDrawerToggl.syncState()
, en fait, je montre le tiroir de navigation en superposition sur la barre d'outils, donc l'animation n'est pas requise dans mon cas.Assurez-vous que vous importez la bascule de tiroir appropriée.
Lorsque j'ai importé la version v4, j'avais la flèche (ci-dessous).
Le changer en ceci (ci-dessous, v7) a résolu mon problème.
la source
Assurez-vous d'appeler
mDrawerToggle.syncState();
APRÈS avoir appelé
la source
Lorsque vous utilisez ActionBarDrawerToggle, vous devez l'appeler pendant onPostCreate () et onConfigurationChanged ()
la source
onOptionsItemSelected
aussi.Étant donné que mon NavigationDrawer étendait un fragment et non une activité, je n'ai pas pu remplacer postCreate. Voici ce que j'ai fait.
J'espère que ça aide!
la source
N'oubliez pas de remplacer la méthode onOptionsItemSelected et de vérifier si ctionBarDrawerToggle a été cliqué, dans ce cas, retournez true sinon l'activité sera terminée.
la source
return actionBarDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item)
Vous pouvez simplement utiliser ceci:
la source
Lorsque vous incluez ActionBarDrawerToggle, assurez-vous d'utiliser la méthode de publication:
la source
setHomeAsUpIndicator(R.drawable.ic_menu/ic_back)
qui forçait l'icône qui était prétendue lors du passage d'un fragment à l'autre. Mais après avoir été mis à jour avec la nouvelle icône animée de hamburger, cela ne fait pas le travail.mDrawerToggle.syncState()
n'a pas fonctionné pour moi, mais je l'ai finalement réussi à travailler avec:Je n'utilisais cependant pas de barre d'outils.
la source
J'ai également eu un problème similaire, dans mon cas, le problème était que, lors du lancement de l'actionbartoggle, je ne transmettais pas d'argument de barre d'outils valide (la barre d'outils a été initialisée plus tard), sans une barre d'outils appropriée et non nulle, ActionBarToggle ne parviendra pas à créer une icône de hamburger.
la source
vous pouvez appeler syncState () à partir de onPostCreate de votre activité pour synchroniser l'indicateur avec l'état du DrawerLayout lié après que onRestoreInstanceState s'est produit.
ActionBarDrawerToggle peut également être utilisé directement comme DrawerLayout.DrawerListener, ou si vous fournissez déjà votre propre écouteur, appelez chacune des méthodes d'écoute à partir de la vôtre.
la source
Le tiroir de navigation ne s'affichait pas lorsque vous cliquiez sur le menu de la barre d'actions. Cela a réglé le problème pour moi.
la source
Cela fonctionne pour moi. J'ai étendu AppCompatActivity au lieu d'ActionBarActivity.
la source