Android - проверяемые кнопки в меню настроек - PullRequest
1 голос
/ 06 августа 2010

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


альтернативный текст http://img291.imageshack.us/img291/1221/deviceit.png


Я пробовал следующим образом:

/** Menu creation and setup **/

/* Creates the menu items */
public boolean onCreateOptionsMenu(Menu menu) {
 boolean result = super.onCreateOptionsMenu(menu);

    menu.add(0, 1, 0, "Speaker").setCheckable(true);
    menu.add(0, 2, 0, "Mute").setCheckable(true);
    return result;
}

/* Handles item selections */
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case 1:
  if(audioManager.isSpeakerphoneOn()==false){
   audioManager.setSpeakerphoneOn(true);
   audioManager.setRouting(AudioManager.MODE_IN_CALL,
      AudioManager.ROUTE_SPEAKER, AudioManager.ROUTE_ALL);
  }else{
   audioManager.setSpeakerphoneOn(false);
   audioManager.setRouting(AudioManager.MODE_IN_CALL,
      AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL);
  }
        return true;
    case 2:
     if(audioManager.isMicrophoneMute())
   audioManager.setMicrophoneMute(false);
   else
   audioManager.setMicrophoneMute(true);
        return true;
    }
    return false;
}  

Но это не работает, это только дает мне текст на кнопках в меню параметров

РЕДАКТИРОВАТЬ: Iдобавили следующий метод onPrepareOptionsMenu:

public boolean onPrepareOptionsMenu(Menu menu){
    boolean result = super.onPrepareOptionsMenu(menu);

    if(audioManager.isSpeakerphoneOn())
     menu.findItem(1).setChecked(true);
    else
     menu.findItem(1).setChecked(false);

    if(audioManager.isMicrophoneMute())
     menu.findItem(2).setChecked(true);
    else
     menu.findItem(2).setChecked(false);


    return result;
}

Однако я получаю тот же результат, только текст и без контрольной лампы, как на картинке выше

Ответы [ 2 ]

4 голосов
/ 06 августа 2010

Если вы хотите динамически изменять состояние вашего меню параметров, вам нужно использовать onPrepareMenu().В этом методе вы можете выполнять динамические проверки и обновлять все, что захотите.Удачи !!
документация

После некоторых копаний это выглядит как пользовательский вид.Я думаю, что ваша картинка приходит из этого кода .

1 голос
/ 18 ноября 2012

Это старый вопрос, но у меня возникла та же проблема, и я много искал, чтобы найти меню опций, показанное выше.Я нашел учебник по http://www.codeproject.com и немного его изменил.Может быть, это не код для программистов, но он работает для меня.Посмотрите мои изменения на моей (плохо организованной) веб-странице на сайтах Google (я тоже получил небольшое руководство на этом сайте):

https://sites.google.com/site/opiatefuchs/android-code-examples

Этот код оригинален с wjfrancisна веб-странице Code Project (много реквизитов):

http://www.codeproject.com/Articles/173121/Android-Menus-My-Way

Я только что изменил его и был бы рад, если у кого-нибудь появятся идеи по улучшению этого кода.Но пока это работает.

...