2016-12-05 2 views
-3

Я хочу уточнить, что я говорю о меню ящика навигации, а не о значке кнопки действия.Изменение программного меню значков

Мне нужно программно изменить значок меню. Для этого я сделал следующий:

private Menu menu; 

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    this.menu = menu; 
    getMenuInflater().inflate(R.menu.navigation_menu, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

.... и я стараюсь, чтобы изменить пункт значок с:

menu.getItem(6).setIcon(getResources().getDrawable(R.mipmap.ic_flash_on_black_24dp)); 

К сожалению, этот пункт остается неизменной. Может помочь мне решить проблему, пожалуйста?

Я заметил, что getDrawable устарел, но нет идеи, как использовать новую.

+1

Возможный дубликат [Изменение программного значка меню переполнения Android программно] (http://stackoverflow.com/questions/22046903/changing-the-android-overflow-menu-icon-programmatically) – albert

+0

Использование ContextCompat.getDrawable (контекст, R.mipmap.ic_flash_on_black_24dp); – USKMobility

+0

Я хочу изменить значок меню в навигационном ящике, а не значок кнопки. –

ответ

0

Попробуйте разместить код модификации значка в onPrepareOptionsMenu методе:

Подготовьте стандартное меню настроек экрана будет отображаться. Это вызывается прямо перед отображением меню при каждом его показе. Вы можете использовать этот метод для эффективного включения/выключения элементов или, наоборот, динамического изменения содержимого.

+0

Не работает. Приложение перестает работать. –

0

Ответ был очень прост:

private Menu menu; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.navigation); 
    navigationView.setNavigationItemSelectedListener(this); 

    menu = navigationView.getMenu(); 

...

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 

    int id = item.getItemId(); 

    if (id == R.id.nav_light) { 
     if (canTorch) { 
      try { 
       if (isTorchOn) { 
        turnOffFlashLight(); 
        isTorchOn = false; 
        menu.getItem(6).setIcon(getResources().getDrawable(R.mipmap.ic_flash_on_black_24dp)); 
       } else { 
        turnOnFlashLight(); 
        isTorchOn = true; 
        menu.getItem(6).setIcon(getResources().getDrawable(R.mipmap.ic_flash_off_black_24dp)); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawerLayout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

Все было о: Меню = navigationView.getMenu();

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