8

ハンバーガーメニューのアイコンをNavigationViewに変更しようとしていますが、できません。ここでナビゲーション用ハンガーのアイコンを変更する

は私がNAV引き出しの設定が行われ、ベース活性を有し、これまで

を試してきたものです。関連するコードはこちら

@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); 
} 

しかし、それは私のために働いていないようです。私もSupportActionBarsetDrawerIndicatorEnabled(false)setHomeAsUpIndicator(R.drawable.ic_share_48pt_2x)を呼び出そうとしましたが、それもうまくいきません。

答えて

20

次のコードは、私のためにうまく動作、

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); 
+1

'@Overrideを追加する。 protected void onPostCreate(@Nullable Bundle savedInstanceState){ super.onPostCreate(savedInstanceState); nActionBarToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig){ super.onConfigurationChanged(newConfig); nActionBarToggle.onConfigurationChanged(newConfig); } '私のために働いた – captaindroid

+0

私の仕事に感謝 –

+0

私はまさにそうでしたが、私のトグルはクリックできません。 – Yar

0

ドキュメントを見てみましたか? 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() 
      } 
     }; 
+0

事は、私は動的にこのアイコンを変更する必要がある..私はこのアイコンの上に通知の数を表示する必要があります。 –

+0

@AbhishekBansalハンバーガーアイコンの通知回数も表示する必要があります。あなたはそれを管理しましたか? –

13

として動的にアイコンを更新することができますただ、これを使用する:

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

あなたは受け入れ答えであるsetToolbarNavigationClickListenerを処理する必要がいけません。

+3

輝かしい解決策 –

+0

非常に効果的な解決策。クリックするとハンバーガーボタンをどのように回すことができますか?それはどこにも回っていない、ちょうど背景色が強調表示されています – Zoffa

0

は、ここで私のためにどのような作品だ:

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    setContentView(R.layout.activity_main) 
    setSupportActionBar(toolbar) 

    val toggle = ActionBarDrawerToggle(
      this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) 
    //toggle.isDrawerSlideAnimationEnabled = false 
    toggle.isDrawerIndicatorEnabled = false 
    toggle.setToolbarNavigationClickListener { 
     if (drawer_layout.isDrawerOpen(GravityCompat.START)) 
      drawer_layout.closeDrawer(GravityCompat.START) 
     else 
      drawer_layout.openDrawer(GravityCompat.START) 
    } 
    toggle.setHomeAsUpIndicator(AppCompatResources.getDrawable(this, R.drawable.ic_android_black_24dp)) 
    drawer_layout.addDrawerListener(toggle) 
    toggle.syncState() 
    nav_view.setNavigationItemSelectedListener(this) 
} 

override fun onBackPressed() { 
    if (drawer_layout.isDrawerOpen(GravityCompat.START)) { 
     drawer_layout.closeDrawer(GravityCompat.START) 
    } else { 
     super.onBackPressed() 
    } 
} 

override fun onNavigationItemSelected(item: MenuItem): Boolean { 
    when (item.itemId) { 
     ... 
    } 
    drawer_layout.closeDrawer(GravityCompat.START) 
    return true 
} 
関連する問題