Я использую панель навигации в стиле леденца на палочке с последней библиотекой поддержки appcompat, но проблема в том, что значок гамбургера никогда не отображается. Отображается только значок "Назад".
Это мой код активности
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);
}
}
Это мой файл стилей
<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>
Файл макета
<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>
В обоих случаях отображается только стрелка назад, я прочитал много сообщений, но, похоже, ничего не изменилось. Любая помощь будет оценена.
ActionBarDrawerToggle
mDrawerToggl.syncState()
, на самом деле я показываю панель навигации как наложение на панели инструментов, поэтому в моем случае анимация не требуется.Убедитесь, что вы импортируете правильный переключатель ящика.
Когда я импортировал версию v4, у меня была стрелка (ниже).
Изменение его на это (ниже, v7) устранило мою проблему.
источник
Убедитесь, что вы звоните
mDrawerToggle.syncState();
ПОСЛЕ звонка
источник
При использовании ActionBarDrawerToggle вы должны вызывать его во время onPostCreate () и onConfigurationChanged ()
источник
onOptionsItemSelected
тоже.Поскольку мой NavigationDrawer расширял фрагмент, а не действие, я не смог переопределить postCreate. Ниже то, что я сделал.
Надеюсь, поможет!
источник
Не забудьте переопределить метод onOptionsItemSelected и проверить, был ли нажат ctionBarDrawerToggle, в этом случае верните true, иначе действие будет завершено.
источник
return actionBarDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item)
Вы можете просто использовать это:
источник
Включая ActionBarDrawerToggle, обязательно используйте метод post:
источник
setHomeAsUpIndicator(R.drawable.ic_menu/ic_back)
этого значка, который был симулирован при переключении между фрагментами. Но после обновления до нового анимированного значка гамбургера это не работает.mDrawerToggle.syncState()
у меня не сработало, но в итоге я получил возможность работать с:Однако я не использовал панель инструментов.
источник
У меня также была аналогичная проблема, в моем случае проблема заключалась в том, что при запуске actionbartoggle я не передавал допустимый аргумент панели инструментов (панель инструментов была инициализирована позже), без правильной, ненулевой панели инструментов ActionBarToggle не сможет создать значок гамбургера.
источник
вы можете вызвать syncState () из onPostCreate вашей Activity, чтобы синхронизировать индикатор с состоянием связанного DrawerLayout после того, как произошло onRestoreInstanceState.
Также ActionBarDrawerToggle можно использовать непосредственно как DrawerLayout.DrawerListener, или, если вы уже предоставляете свой собственный слушатель, вызовите каждый из методов слушателя из своего собственного.
источник
Панель навигации не отображалась при нажатии на меню панели действий. Это исправило это для меня.
источник
У меня это работает. Я расширил AppCompatActivity вместо ActionBarActivity.
источник