Изменение значка панели навигации на панели действий Android

Я создал NavigationDrawer в своем приложении, используя панель действий. введите здесь описание изображения

Как показано на рисунке выше, я хочу изменить значок кнопки-переключателя NavigationDrawer на то, что мне нужно. Как я могу это изменить?

Вот мой код: -

mDrawerList.setOnItemClickListener(new SlideMenuClickListener());


    // enabling action bar app icon and behaving it as toggle button
    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.hamburger_button, //nav menu toggle icon
            R.string.app_name, // nav drawer open - description for accessibility
            R.string.app_name // nav drawer close - description for accessibility
            ) {
        public void onDrawerClosed(View view) 
        {

            getActionBar().setTitle(mTitle);
            // calling onPrepareOptionsMenu() to show action bar icons
            invalidateOptionsMenu();
        }

        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle("Settings");
            // calling onPrepareOptionsMenu() to hide action bar icons
            invalidateOptionsMenu();
        }
    };
    mDrawerLayout.setDrawerListener(mDrawerToggle);
@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Pass any configuration change to the drawer toggls
    mDrawerToggle.onConfigurationChanged(newConfig);
}

Если я попытаюсь изменить его на R.drawable.hamburger_button, он все равно покажет значок по умолчанию.


person user3713706    schedule 30.06.2014    source источник
comment
R.drawable.hamburger_button — это ваше собственное изображение, а не то, что предоставляется Android?   -  person Shivam Verma    schedule 30.06.2014
comment
да. Это мой пользовательский образ.   -  person user3713706    schedule 30.06.2014
comment
stackoverflow.com/ вопросов/9252354/ пожалуйста, возьмите бабло по этой ссылке   -  person Giant    schedule 30.06.2014
comment
@HakHak это работает. Большое спасибо. Пожалуйста, напишите ответ, чтобы я принял его. Также есть идеи, как разместить заголовок приложения в центре панели действий?   -  person user3713706    schedule 30.06.2014
comment
@user3713706 user3713706 нет необходимости, приятель .. потому что я тоже этим занимаюсь и смог заставить это работать, я просто надеялся, что это поможет и вам, счастливого кодирования :)   -  person Giant    schedule 30.06.2014


Ответы (9)


Чтобы заменить значок индикатора ящика своим собственным рисунком (не анимированным), используя ActionBarDrawerToggle версии 7, вы можете сделать следующее:

//After instantiating your ActionBarDrawerToggle
mDrawerToggle.setDrawerIndicatorEnabled(false);
Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.your_custom_icon, getActivity().getTheme());
mDrawerToggle.setHomeAsUpIndicator(drawable);
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mDrawerLayout.isDrawerVisible(GravityCompat.START)) {
            mDrawerLayout.closeDrawer(GravityCompat.START);
        } else {
            mDrawerLayout.openDrawer(GravityCompat.START);
        }
    }
});
person Mateus Gondim    schedule 20.08.2015
comment
каким должен быть размер пользовательского значка? - person TapanHP; 15.03.2017
comment
идеальный ответ, который включает прослушиватель навигации, что важно, иначе щелчок по значку обрабатывается как возврат. - person Simon Ninon; 30.01.2018
comment
Не идеально. Почему это не поддерживает динамический размер? - person grantespo; 02.03.2019
comment
Это исправило мою проблему - person Naveed Ahmad; 20.12.2020

Попробуйте изменить значок вручную с помощью setHomeAsUpIndicator() .

Нравится,

ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.ic_drawer);

и

ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(...){};
mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_drawer_toggle);
person Msp    schedule 09.08.2015

Убедитесь, что вы включили их для правильной синхронизации состояний значка.

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}
person Shivam Verma    schedule 30.06.2014

вызовите методы суперкласса ActionBarDrawerToggle super.onDrawerClosed(view) и super.onDrawerOpened(drawerView) как

mDrawerToggle = new ActionBarDrawerToggle(...){
        public void onDrawerClosed(View view) 
         {
           super.onDrawerClosed(view);
           //---your code
         }

        public void onDrawerOpened(View drawerView) 
         {
           super.onDrawerOpened(drawerView);
           //---your code
         }
 }
person shobhan    schedule 25.02.2015

Для меня сработало добавление setHomeAsUpIndicator.

mDrawerToggle = new ActionBarDrawerToggle(
            this,                  /* host Activity */
            mDrawerLayout,         /* DrawerLayout object */
            R.drawable.custom_icon,  /* 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 */
    ) {
        public void onDrawerClosed(View view) {
            getSupportActionBar().setTitle(mTitle);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }

        public void onDrawerOpened(View drawerView) {
            getSupportActionBar().setTitle(mDrawerTitle);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }
    };
    mDrawerLayout.setDrawerListener(mDrawerToggle);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setHomeAsUpIndicator(R.drawable.custom_icon);
person pcsaunak    schedule 18.07.2016

При инициализации ActionBarDrawerToggle пишем следующий код:

toolbar.setNavigationIcon(R.drawable.ic_menu_camera);
person Ahmed Raafat    schedule 04.10.2016

  Here is a working solution: 

 setSupportActionBar(toolbar2);
    toggle=new ActionBarDrawerToggle(this,drawerLayout,toolbar2,
    R.string.navigation_drawer_open,R.string.navigation_drawer_close);
    bottomNavigationView.setOnNavigationItemSelectedListener(this);
    navigationView=findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
    toggle.syncState();

    //---------------------------------------To change Navigation drawer icon
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
etSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_favorite_black_24dp);

это видео Youtube помогло https://www.youtube.com/watch?v=biUaIO-N7Ew

person amr eshak    schedule 11.06.2020

Прежде всего вы должны в манифесте попробовать этот код:

android:icon="@drawable/ic_icon1" 

Это изображение для общего логотипа вашего приложения

android:logo="@drawable/ic_drower" 

Это изображение для панели действий

После этого в основной активности попробуйте этот код:

actionBar.setDisplayUseLogoEnabled(true);
person shiva yekta    schedule 11.04.2016

person    schedule
comment
это устарело в пользу v7, а v7ActionBarToggle не имеет конструктора для изменения значка. - person user2968401; 18.04.2015
comment
Чтобы изменить значок с помощью ActionBarDrawerToggle v7: stackoverflow.com/a/32117399/3752244 - person Mateus Gondim; 20.08.2015