Eu posso fazer isso facilmente quando estou usando onCreateOptionsMenu
ou onOptionsItemSelected
métodos.
Mas eu tenho um botão em algum lugar na tela e, ao clicar nesse botão, ele deve ativar / desativar os itens do menu de contexto.
fonte
Eu posso fazer isso facilmente quando estou usando onCreateOptionsMenu
ou onOptionsItemSelected
métodos.
Mas eu tenho um botão em algum lugar na tela e, ao clicar nesse botão, ele deve ativar / desativar os itens do menu de contexto.
De qualquer forma, a documentação cobre todas as coisas.
Depois que a atividade é criada, o
onCreateOptionsMenu()
método é chamado apenas uma vez, conforme descrito acima. O sistema mantém e reutiliza o queMenu
você define neste método até que sua atividade seja destruída. Se você deseja alterar o menu Opções a qualquer momento após a sua criação, você deve substituir oonPrepareOptionsMenu()
método. Isso passa o objeto Menu como ele existe atualmente. Isso é útil se você deseja remover, adicionar, desativar ou ativar itens de menu, dependendo do estado atual do seu aplicativo.
Por exemplo
@Override
public boolean onPrepareOptionsMenu (Menu menu) {
if (isFinalized) {
menu.getItem(1).setEnabled(false);
// You can also use something like:
// menu.findItem(R.id.example_foobar).setEnabled(false);
}
return true;
}
No Android 3.0 e superior, o menu de opções é considerado sempre aberto quando os itens de menu são apresentados na barra de ação. Quando um evento ocorre e você deseja executar uma atualização de menu, você deve ligar invalidateOptionsMenu()
para solicitar a chamada do sistema onPrepareOptionsMenu()
.
setEnable()
muda o que acontece quando você pressiona esse menu, mas não muda a aparência (o que há de errado, desenvolvedores do Android?). Portanto, é mais claro desabilitar e alterar o título ou, de preferência, apenas tornar oMenuItem
invisível.false
para desativar o menu completamente.Em todas as versões do Android, a maneira mais fácil: use isso para MOSTRAR um ícone de ação do menu como desativado E torná-lo FUNCIONADO também como desativado:
fonte
Você pode salvar o item como uma variável ao criar o menu de opções e, em seguida, alterar suas propriedades à vontade.
fonte
onPrepareOptionsMenu
?simplifique a versão @Vikas
fonte
Como atualizar o menu atual para ativar ou desativar os itens quando um AsyncTask é concluído.
No meu caso de uso, eu precisava desativar meu menu enquanto o AsyncTask carregava dados; depois de carregar todos os dados, era necessário ativar todo o menu novamente para permitir que o usuário o usasse.
Isso impediu o aplicativo de permitir que os usuários clicassem nos itens de menu enquanto os dados estavam sendo carregados.
Primeiro, declaro uma variável de estado; se a variável for 0, o menu será exibido; se essa variável for 1, o menu estará oculto.
Então, na minha
onCreateOptionsMenu()
verificação dessa variável, se for 1, desativo todos os meus itens; caso contrário, apenas mostro a todosAgora, quando minha Atividade iniciar,
onCreateOptionsMenu()
será chamada apenas uma vez e todos os meus itens desaparecerão porque eu configurei o estado para eles no início.Em seguida, crio um AsyncTask, onde defino essa variável de estado como 0 no meu
onPostExecute()
Este passo é muito importante!
Quando você ligar
invalidateOptionsMenu();
, será reiniciadoonCreateOptionsMenu();
Então, depois de configurar meu estado como 0, apenas redesenhei todo o menu, mas desta vez com a variável 0, ou seja, todo o menu será exibido depois que todo o processo assíncrono estiver concluído, e então meu usuário poderá usar o menu .
Resultados
fonte
a melhor solução quando você executa na gaveta de navegação
fonte
Uma resposta mais moderna para uma pergunta antiga:
MainActivity.kt
menu_main_activity.xml
menu_item_icon_selector.xml
attrs.xml
styles.xml or themes.xml
fonte
fonte
O que fiz foi salvar uma referência ao Menu em
onCreateOptionsMenu
. Isso é semelhante à resposta de nir, exceto que, em vez de salvar cada item individual, salvei o menu inteiro.Declare um menu
Menu toolbarMenu;
.Em seguida,
onCreateOptionsMenu
salve o menu na sua variávelAgora você pode acessar seu menu e todos os itens a qualquer momento.
toolbarMenu.getItem(0).setEnabled(false);
fonte
fonte
Se menu visível
Se ocultar menu
fonte
Geralmente pode alterar as propriedades de suas visualizações em tempo de execução:
e depois...
mas
se você deseja modificar a visibilidade das opções no menu de contexto, pressione o botão, você pode ativar um sinalizador e, em seguida, no menu Criar menu, você pode fazer algo assim:
Eu espero que isso ajude
fonte
onCreateContextMenu
método. Mas eu quero acessar o menu de contexto fora desse método.onCreateContextMenu
será chamado apenas uma vez, mas posso clicar no botão por muito tempo para ativar / desativar o item de menu.