Intereting Posts
Одновременное чтение и запись SQLite Передача аргумента между действиями – null Показать навигационный ящик по физической кнопке меню Кинжал 2 на Android. Различные способы хранения и доступа к компоненту @Singleton Значок уведомления о Lollipop слишком мал Как возобновить процесс загрузки файлов в Android? Использовать onactivityresult андроид Какая анимация / просмотр используется для последних приложений / истории в Android 5.0 (Lollipop)? Почему предварительный просмотр камеры Android по умолчанию более плавный, чем мой собственный предварительный просмотр камеры? Можно ли получить контактную информацию «Владелец» в Android? Строки преобразования SQLite в строку с разделителями-запятыми Как использовать Views (месяц, день, неделя) из Android Stock Calendar в пользовательском приложении Фрагменты в ViewPager не загружаются при восстановлении содержащего фрагмента Android – Как определить, находятся ли координаты на дороге в Google Maps SVN объединяется с андроид-студией

Изменение значка гамбургера на панели навигации

Я пытаюсь изменить значок меню гамбургера для NavigationView но я не могу этого сделать.

Вот что я пробовал до сих пор

У меня есть базовая активность, когда настройка навигационного ящика выполняется. Вот соответствующий фрагмент кода

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.activity_base_nav); setSupportActionBar(toolbar); setupDrawer(); } private void setupDrawer() { mDrawerLayout.setDrawerListener(this); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open, R.string.close); mDrawerToggle = new ActionBarDrawerToggle(mContext, mDrawerLayout, R.string.open, R.string.close); mDrawerLayout.setDrawerListener(mDrawerToggle); if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(false); mDrawerToggle.setDrawerIndicatorEnabled(false); mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_share_48pt_2x); } mDrawerToggle.syncState(); mNavigationView.setNavigationItemSelectedListener( menuItem -> { mMenuItem = menuItem.getItemId(); mDrawerUtil.onNavMenuItemClicked(mMenuItem); mDrawerLayout.closeDrawers(); return true; }); } @Override public void setContentView(int layoutResID) { getLayoutInflater().inflate(layoutResID, mContainer); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } 

Однако, похоже, это не работает для меня. Я также попытался вызвать setDrawerIndicatorEnabled(false) и setHomeAsUpIndicator(R.drawable.ic_share_48pt_2x) на SupportActionBar но это также не работает.

Следующий код работает хорошо для меня,

 protected void onCreate(Bundle savedInstanceState) { ... getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(false); toggle.setDrawerIndicatorEnabled(false); toggle.setHomeAsUpIndicator(R.drawable.ic_custom_drawer_icon); ... } 

Я также должен был добавить прослушиватель кликов на панели инструментов, чтобы прослушивать события кликов на значке пользовательского ящика

 protected void onCreate(Bundle savedInstanceState) { ... toggle.setToolbarNavigationClickListener(new View.OnClickListener() { @Override public void onClick(View view) { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { drawer.openDrawer(GravityCompat.START); } } }); ... } 

Наконец, я могу обновить значок динамически, так как

 toggle.setHomeAsUpIndicator(R.drawable.ic_new_icon); 

Просто используйте это:

 toolbar.post(new Runnable() { @Override public void run() { Drawable d = ResourcesCompat.getDrawable(getResources(), R.mipmap.ic_launcher, null); toolbar.setNavigationIcon(d); } }); 

Вам не нужно обращаться с setToolbarNavigationClickListener, который находится в принятом ответе.

Вы пытаетесь посмотреть документацию? http://developer.android.com/training/implementing-navigation/nav-drawer.html

Я нашел в этом фрагмент кода:

 mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, 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() } };