2016-06-29 1 views
1

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

toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar);  
drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
      drawerToggle = new ActionBarDrawerToggle(
        this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
      drawer.setDrawerListener(drawerToggle); 
      drawerToggle.syncState(); 
      drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?

+2

Ты ничего плохого не делает. Недавно они изменили поведение «ActionBarDrawerToggle», чтобы отключить открытие/закрытие ящика, если он заблокирован. Вы устанавливаете 'Toolbar' как поддержку' ActionBar'? –

+0

Да, я устанавливаю панель инструментов как свое действие. – Heisenberg

+0

ОК. У меня есть обходной путь для этого. –

ответ

1

Вы не делаете ничего плохого. Недавно они изменили поведение ActionBarDrawerToggle, чтобы отключить открытие/закрытие ящика, если он заблокирован.

Так как ваш Toolbar является поддержка ActionBar, обходной путь, чтобы удалить Toolbar аргумент от вызова ActionBarDrawerToggle конструктора. Это вызовет вызов метода onOptionsItemSelected() при нажатии переключателя, и там вы можете проверить идентификатор элемента MenuItem и разблокировать ящик перед вызовом метода переключения.

ActionBarDrawerToggle класс работает немного по-другому с ActionBar чем Toolbar, поэтому вам нужно добавить следующий вызов, чтобы показать пуговицу.

getSupportActionBar.setDisplayHomeAsUpEnabled(true); 

Затем измените ActionBarDrawerToggle вызов конструктора следующим образом:

drawerToggle = new ActionBarDrawerToggle(this, 
             drawer, 
             R.string.navigation_drawer_open, 
             R.string.navigation_drawer_close) { 
    @Override 
    public void onDrawerClosed(View drawerView) { 
     super.onDrawerClosed(drawerView); 
     drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 
    } 
}; 

и переопределить метод onOptionsItemSelected()Activity «s так:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if(item.getItemId() == android.R.id.home) { 
     drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 
     drawerToggle.onOptionsItemSelected(item); 
     return true; 
    } 
    ... 

    return super.onOptionsItemSelected(item); 
} 
+0

После этого я больше не вижу значок гамбургера. Есть идеи? – Heisenberg

+0

Ох! Да, вам также нужно вызвать 'getSupportActionBar.setDisplayHomeAsUpEnabled (true);'. Я забыл эту часть. Я отредактирую свой ответ. –

+0

Работает отлично. Благодаря!! Еще одна вещь, однако, вам также придется держать ящик в режиме блокировки по умолчанию, иначе он не будет работать, пока вы не откроете ящик хотя бы один раз. – Heisenberg

 Смежные вопросы

  • Нет связанных вопросов^_^