O Google introduziu NavigationView
na Biblioteca de suporte de design versão 22.2.0, com a qual você pode criar uma gaveta com muita facilidade usando um recurso de menu.
Como posso criar uma linha divisória simples entre dois itens? O agrupamento dos itens não funcionou. Criar uma seção de subitens cria uma linha divisória, mas requer um título, que eu não quero.
Qualquer ajuda seria apreciada.
Respostas:
Tudo o que você precisa fazer é definir um
group
com um ID exclusivo . Verifiquei a implementação. Se o grupo tiver IDs diferentes, ele criará um divisor.Exemplo de menu, criando o separador:
fonte
setChecked
parece funcionar no nível do grupo. Se você selecionar um item no Grupo A, abra a gaveta novamente e selecione o item no Grupo B, os dois itens permanecerão destacados. Talvez o Google conserte esse comportamento no próximo lançamento, mas, por enquanto, essa é a desvantagem do uso de vários grupos com o NavigationView.android:checkableBehavior="none"
para o seu segundo grupo (que são ações, não de navegação, presumo)group
ele será compilado e executado, mas os divisores estarão ocultos.crie um drawer_item_bg.xml como este,
e adicione-o ao NavigationView como aplicativo: itemBackground = "@ drawable / drawer_item_bg"
e aqui vamos nós...
fonte
navMenuView.addItemDecoration(new DividerItemDecoration(NavigationViewActivity.this, DividerItemDecoration.VERTICAL));
para a beira item perfeitoSimples adicione DeviderItemDecoration:
É assim:
fonte
addItemDecoration
linha para 1px?Você pode adicionar divisores facilmente, definindo o plano de fundo do item de menu via XML usando
app:itemBackground
E use LayerDrawable como plano de fundo. Ele preserva a sobreposição de ondulação do design do material por cliques.
O resultado:
fonte
Eu acho que tenho uma solução ainda melhor para o problema de vários itens verificados. Usando o meu jeito, você não precisa se preocupar em alterar seu código ao adicionar novas seções ao seu menu. Meu menu se parece com a solução aceita, escrita por Jared, com a diferença de usar andoid: checkableBehavior = " all " nos grupos:
O checkableBehavior de 'all' torna possível marcar / desmarcar itens únicos à vontade, independentemente de qual grupo eles pertencem. Você só precisa armazenar o último menu marcado. O código java fica assim:
fonte
Fazer grupos diferentes, como a resposta de Nilesh, cria um divisor no meio, mas cria o problema de dois itens marcados na gaveta de navegação.
Uma maneira simples de como eu lidei com isso foi:
fonte
android:checkableBehavior="none"
Não tenho certeza se isso está corrigido
API 26 (Android 8)
ou era possível o tempo todo. Eu ainda sou um noob na programação Android. No entanto, adicionei grupos de pais como abaixo. Testando no telefone físico Android 6,nav_g1
ounav_g2
desmarcará outros itens.Java
código aos ouvintesCódigo do Menu
Notas
android:checkableBehavior="single"
É necessário ter um grupo de pais para que o problema de vários itens de menu selecionados nesta resposta (mencionado nos comentários por hungryghost) não aconteçaE aqui está a captura de tela
fonte
Eu queria divisórias acima do primeiro item e depois do último item. Usando a solução @Nilesh, eu tive que adicionar itens de menu fictícios e definir ativado como false, o que parecia muito sujo. Além disso, e se eu quiser fazer outras coisas legais no meu menu?
Notei que o NavigationView estende o FrameLayout para que você possa colocar seu próprio conteúdo como faria para um FrameLayout. Em seguida, defino um xml de menu vazio para que ele mostre apenas meu layout personalizado. Entendo que isso provavelmente vai contra o caminho que o Google quer que tomemos, mas se você quiser um menu verdadeiramente personalizado, é uma maneira fácil de fazê-lo.
Aqui está o estilo
E drawable
E o menu
editar:
Em vez de botões, você pode usar o TextView com drawable, que imita os itens de menu originais:
fonte
O crédito deve ser enviado à Zorawar pela solução. Desculpe por duplicar a resposta, mas não foi possível adicionar tanto texto formatado em um comentário.
A solução da Zorawar funciona, o código pode ser aprimorado da seguinte forma:
fonte
A resposta de Nileh está certa, exceto que há uma falha de verificação dupla.
Então, usando
com id exclusivo resolverá o problema
fonte
Se você deseja adicionar divisores dinamicamente , basta adicionar um submenu vazio como este:
isso adicionará um divisor.
apenas certifique-se de passar o índice correto ao usar
menu.getItem(int index)
fonte
Além das respostas anteriores, se você deseja separadores decorativos, mas não deseja criar vários grupos devido a problemas de "comportamento verificável" - é possível atribuir o mesmo ID de grupo a todos os seus grupos.
Exemplo:
fonte
Se a resposta selecionada não funcionar para você, tente adicionar isso
onCreateOptionsMenu
além de fornecer o ID do grupo exclusivo:fonte