Wdrażam szufladę nawigacji w stylu Lollipop z najnowszą biblioteką obsługującą appcompat, ale problem polega na tym, że ikona hamburgera nigdy nie jest wyświetlana. Wyświetlana jest tylko ikona powrotu.
To jest mój kod aktywności
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);
}
}
To jest mój plik stylów
<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>
Plik układu
<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>
W obu przypadkach wyświetlana jest tylko strzałka wstecz, przeczytałem wiele postów, ale wydaje się, że nic nie robi różnicy. Każda pomoc będzie mile widziana.
ActionBarDrawerToggle
mDrawerToggl.syncState()
, w rzeczywistości pokazuję szufladę nawigacji jako nakładkę na pasku narzędzi, więc animacja nie jest wymagana w moim przypadku.Upewnij się, że importujesz właściwy przełącznik szuflady.
Kiedy importowałem wersję v4, miałem strzałkę (poniżej).
Zmiana tego na to (poniżej, v7) rozwiązała mój problem.
źródło
Upewnij się, że dzwonisz
mDrawerToggle.syncState();
PO zadzwonieniu
źródło
Używając ActionBarDrawerToggle, musisz wywołać go podczas onPostCreate () i onConfigurationChanged ()
źródło
onOptionsItemSelected
też.Ponieważ mój NavigationDrawer rozszerzał fragment, a nie działanie, nie mogłem zastąpić postCreate. Poniżej przedstawiam to, co zrobiłem.
Mam nadzieję, że to pomoże!
źródło
Nie zapomnij nadpisać metody onOptionsItemSelected i sprawdzić, czy kliknięto ctionBarDrawerToggle, w tym przypadku zwróć true, w przeciwnym razie działanie zostanie zakończone.
źródło
return actionBarDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item)
Możesz po prostu użyć tego:
źródło
Włączając ActionBarDrawerToggle, upewnij się, że używasz metody post:
źródło
setHomeAsUpIndicator(R.drawable.ic_menu/ic_back)
tego, wymuszało ikonę, która była udawana podczas przełączania się między fragmentami. Ale po aktualizacji do nowej animowanej ikony burgera, to nie działa.mDrawerToggle.syncState()
nie zadziałało dla mnie, ale w końcu udało mi się to:Nie korzystałem jednak z paska narzędzi.
źródło
Miałem również podobny problem, w moim przypadku problem polegał na tym, że podczas inicjowania actionbartoggle nie przekazywałem prawidłowego argumentu paska narzędzi (pasek narzędzi został zainicjowany później), bez odpowiedniego, niezerowego paska narzędzi, ActionBarToggle nie utworzy ikony hamburgera.
źródło
możesz wywołać syncState () z onPostCreate swojego działania, aby zsynchronizować wskaźnik ze stanem połączonego DrawerLayout po wystąpieniu onRestoreInstanceState.
Ponadto ActionBarDrawerToggle może być używane bezpośrednio jako DrawerLayout.DrawerListener lub, jeśli już udostępniasz własny detektor, wywołaj każdą z metod listenera z własnej.
źródło
Szuflada nawigacji nie była wyświetlana po kliknięciu menu paska działań. To naprawiło to dla mnie.
źródło
To działa dla mnie. Rozszerzyłem AppCompatActivity zamiast ActionBarActivity.
źródło