2015-05-06 2 views
1

Я использую пользовательский значок навигации, поэтому мне нужно, чтобы drawerToggle.setDrawerIndicatorEnabled(false);. Но теперь мой Navdrawer не открывается при нажатии на мой пользовательский значок.Почему мой NavDrawer не открывается при нажатии на значок навигации?

Любые идеи, как это осуществить? Мне еще нужен ActionBarDrawerToggle?

public void setUpActionBar() { 
    actionBar = (Toolbar) findViewById(R.id.custom_screen_toolbar); 
    setSupportActionBar(actionBar); 

    actionBar.setBackgroundResource(R.drawable.divider_action_bar); 
    actionBar.setNavigationIcon(R.drawable.action_bar_menu); 

    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

    drawerToggle = new ActionBarDrawerToggle(this, /* host Activity */ 
    drawerLayout, /* DrawerLayout object */ 
    actionBar, /* custom action bar */ 
    R.string.drawer_open, /* "open drawer" description */ 
    R.string.drawer_close /* "close drawer" description */ 
    ) { 

     /** Called when a drawer has settled in a completely closed state. */ 
     public void onDrawerClosed(View view) { 
      super.onDrawerClosed(view); 
     } 

     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) { 
      super.onDrawerSlide(drawerView, 0); 
     } 

     /** Called when a drawer has settled in a completely open state. */ 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
     } 
    }; 

    drawerLayout.setDrawerListener(drawerToggle); 
    drawerToggle.setDrawerIndicatorEnabled(false); 
    drawerToggle.syncState(); 
} 

Я также попытался с помощью drawerToggle.setHomeAsUpIndicator(R.drawable.icon); так, чтобы я мог изменить тэ значок без использования setNavigationIcon из панели действий, но это не меняет значок.

ответ

1

Если вы называете drawerToggle.setHomeAsUpIndicator(R.drawable.icon); и drawerToggle.setDrawerIndicatorEnabled(false); тогда он будет работать

public void setHomeAsUpIndicator(Drawable indicator) { 
     if(indicator == null) { 
      this.mHomeAsUpIndicator = this.getThemeUpIndicator(); 
      this.mHasCustomUpIndicator = false; 
     } else { 
      this.mHomeAsUpIndicator = indicator; 
      this.mHasCustomUpIndicator = true; 
     } 

     if(!this.mDrawerIndicatorEnabled) { 
      this.setActionBarUpIndicator(this.mHomeAsUpIndicator, 0); 
     } 

и

public void setDrawerIndicatorEnabled(boolean enable) { 
     if(enable != this.mDrawerIndicatorEnabled) {//if you set enable be "false", below sentences do not run, because the default value of mDrawerIndicatorEnabled is false 
      if(enable) { 
       this.setActionBarUpIndicator((Drawable)this.mSlider, this.mDrawerLayout.isDrawerOpen(8388611)?this.mCloseDrawerContentDescRes:this.mOpenDrawerContentDescRes); 
      } else { 
       this.setActionBarUpIndicator(this.mHomeAsUpIndicator, 0); 
      } 

      this.mDrawerIndicatorEnabled = enable; 
     } 

    } 

хотя вы называете setHomeAsUpIndicator (рисуем индикатор), потому что mDrawerIndicatorEnabled является ложным, поэтому он не измените значок. (Но если вы сначала вызываете setDrawerIndicatorEnabled, а затем звоните setHomeAsUpIndicator, вы также можете изменить значок).

Если вы позвоните toolbar.setNavigationIcon(R.mipmap.ic_launcher);, значок изменится, так как он назовет setActionBarUpIndicator в ActionBarDrawerToggle.java. Вы увидите, что панель инструментов установит эту возможность для ее значка навигации.

public void setActionBarUpIndicator(Drawable upDrawable, int contentDescRes) { 
      this.mToolbar.setNavigationIcon(upDrawable); 
      this.mToolbar.setNavigationContentDescription(contentDescRes); 
     } 

Если вы хотите, чтобы открыть меню ящика с щелчком, вы должны установить щелчок слушателя для этого «navigationIcon», потому что после того, как вы называете это, система не поможет вам за это.

0

setDrawerIndicatorEnabled(false); отключит индикатор ящика, поэтому я предполагаю, что он должен быть установлен как истинный. Кроме того, если вам нужен пользовательский значок для ящика вы можете установить его в качестве,

mDrawerToggle = new ActionBarDrawerToggle(
       this,     /* host Activity */ 
       mDrawerLayout,   /* DrawerLayout object */ 
       R.drawable.earth, /* nav drawer image to replace 'Up' caret */ 
       R.string.drawer_open, /* "open drawer" description for accessibility */ 
       R.string.drawer_close /* "close drawer" description for accessibility */ 
       ) 

вытяжки аргумент должен заменить до каретки.

Полезный link с образцом скачать.

+0

Я использую 'import android.support.v7.app.ActionBarDrawerToggle;' будет ли ваше решение по-прежнему жизнеспособным? –

+0

В нем говорится, что он не определен. Конструктор не определен –

+0

Позвольте мне попробовать это с поддержкой lib! – luckylukein

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