Ich implementiere die Navigationsschublade im Lutscherstil mit der neuesten Appcompat-Unterstützungsbibliothek, aber das Problem ist, dass das Hamburger-Symbol nie angezeigt wird. Es wird nur das Symbol "Zurück" angezeigt.
Dies ist mein Aktivitätscode
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);
}
}
Dies ist meine Stildatei
<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>
Die Layoutdatei
<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>
In beiden Fällen wird nur der Pfeil nach hinten angezeigt. Ich habe viele Beiträge gelesen, aber nichts scheint einen Unterschied zu machen. Jede Hilfe wäre dankbar.
ActionBarDrawerToggle
mDrawerToggl.syncState()
anzeigen, ohne es anzurufen? Eigentlich zeige ich die Navigationsleiste als Überlagerung in der Symbolleiste, sodass die Animation in meinem Fall nicht erforderlich ist.Stellen Sie sicher, dass Sie den richtigen Schubladenschalter importieren.
Als ich die v4-Version importierte, hatte ich den Pfeil (unten).
Das Ändern in dieses (unten, Version 7) hat mein Problem behoben.
quelle
Stellen Sie sicher, dass Sie anrufen
mDrawerToggle.syncState();
Nach dem Anruf
quelle
Wenn Sie ActionBarDrawerToggle verwenden, müssen Sie es während onPostCreate () und onConfigurationChanged () aufrufen.
quelle
onOptionsItemSelected
auch.Da mein NavigationDrawer ein Fragment und keine Aktivität erweiterte, konnte ich postCreate nicht überschreiben. Das Folgende ist was ich getan habe.
Ich hoffe es hilft!
quelle
Vergessen Sie nicht, die onOptionsItemSelected-Methode zu überschreiben und zu überprüfen, ob auf ctionBarDrawerToggle geklickt wurde. In diesem Fall geben Sie true zurück, da sonst die Aktivität beendet wird.
quelle
return actionBarDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item)
Sie können dies einfach verwenden:
quelle
Stellen Sie beim Einschließen von ActionBarDrawerToggle sicher, dass Sie die post-Methode verwenden:
quelle
setHomeAsUpIndicator(R.drawable.ic_menu/ic_back)
damit durchgeführt wurde, erzwang das Symbol, das beim Umschalten zwischen Fragmenten vorgetäuscht wurde. Nach der Aktualisierung auf das neue animierte Burger-Symbol reicht dies jedoch nicht aus.mDrawerToggle.syncState()
hat bei mir nicht funktioniert, aber ich habe es schließlich zum Arbeiten gebracht:Ich habe jedoch keine Symbolleiste verwendet.
quelle
Ich habe auch ein ähnliches Problem erhalten. In meinem Fall bestand das Problem darin, dass ich beim Starten von actionbartoggle kein gültiges Symbolleistenargument übergeben habe (die Symbolleiste wurde später initialisiert). Ohne eine ordnungsgemäße Symbolleiste ungleich Null kann ActionBarToggle kein Hamburger-Symbol erstellen.
quelle
Sie können syncState () aus onPostCreate Ihrer Aktivität aufrufen, um den Indikator mit dem Status des verknüpften DrawerLayout zu synchronisieren, nachdem onRestoreInstanceState aufgetreten ist.
ActionBarDrawerToggle kann auch direkt als DrawerLayout.DrawerListener verwendet werden. Wenn Sie bereits einen eigenen Listener bereitstellen, rufen Sie jede der Listener-Methoden von sich aus auf.
quelle
Die Navigationsleiste wurde beim Klicken auf das Aktionsleistenmenü nicht angezeigt. Das hat es für mich behoben.
quelle
Das funktioniert bei mir. Ich habe AppCompatActivity anstelle von ActionBarActivity erweitert.
quelle