Estou usando a nova biblioteca Android Design Support para implementar uma gaveta de navegação em meu aplicativo.
Não consigo descobrir como mudar a cor de um item selecionado!
Aqui está o xml do menu:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/navigation_item_1"
android:icon="@drawable/ic_1"
android:title="@string/navigation_item_1"/>
<item
android:id="@+id/navigation_item_2"
android:icon="@drawable/ic_2"
android:title="@string/navigation_item_2"/>
</group>
E aqui está o xml de navegação, que é colocado dentro de um android.support.v4.widget.DrawerLayout
:
<android.support.design.widget.NavigationView
android:id="@+id/activity_main_navigationview"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/drawer_header"
app:itemIconTint="@color/black"
app:itemTextColor="@color/primary_text"
app:menu="@menu/menu_drawer">
<TextView
android:id="@+id/main_activity_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:textColor="@color/primary_text" />
</android.support.design.widget.NavigationView>
Obrigado pela ajuda !
[EDIT] Já observei soluções como esta: Alterar a cor de fundo do menu do Android .
Parece ser um hack e tanto, e pensei que, com a nova Biblioteca de Suporte a Design, algo mais limpo teria sido introduzido.
Respostas:
Bem, você pode conseguir isso usando Color State Resource . Se você perceber
NavigationView
que está usandoAqui, em vez de usar
@color/black
ou@color/primary_test
, use aColor State List Resource
. Para isso, primeiro crie um novoxml
(por exemplo, drawer_item.xml) dentro docolor
diretório (que deve estar dentro dores
diretório.) Se você ainda não tiver um diretório chamadocolor
, crie um.Agora dentro
drawer_item.xml
faça algo assimA etapa final seria mudar seu
NavigationView
Assim você pode usar separadas Cor Estado Listar recursos para
IconTint
,ItemTextColor
,ItemBackground
.Agora, quando você define um item como marcado (tanto em
xml
ou programaticamente), o item particular terá uma cor diferente dos desmarcados.fonte
Acredito que
app:itemBackground
espera um drawable. Portanto, siga as etapas abaixo:Faça um arquivo drawable
highlight_color.xml
com o seguinte conteúdo:Faça outro arquivo drawable
nav_item_drawable.xml
com o seguinte conteúdo:Por fim, adicione a
app:itemBackground
tag no NavView:aqui, o arquivo highlight_color.xml define um drawable de cor sólida para o fundo. Posteriormente, este drawable de cores é atribuído ao seletor nav_item_drawable.xml.
Isso funcionou para mim. Espero que isso ajude.
************************************************ ATUALIZADO *** ********************************************
Embora a resposta mencionada acima dê a você um controle preciso sobre algumas propriedades, a maneira que estou prestes a descrever parece mais SÓLIDA e um pouco MAIS FRESCA .
Então, o que você pode fazer é definir um ThemeOverlay no
styles.xml
para o NavigationView assim:agora aplique este ThemeOverlay ao
app:theme
atributo de NavigationView, como este:Espero que isso ajude.
fonte
android:background="@drawable/nav_item_drawable"
para outros widgets como RadioButton, Checkbox, Button etc. Reduz a programação de bloatware para manipulaçãosetOnCheckedChangeListener
apenas para realce de cores.É necessário definir
NavigateItem
verdadeiro verificado sempre que o itemNavigateView
é clicadoAdicionar
NavigationItemSelectedListener
emNavigationView
fonte
setChecked(true)
). Posso ver a cor do item marcado mudando, mas não posso modificá-lo sozinho, a cor é sempre uma versão mais clara do fundo do navigatioview.setChecked(true)
noView
muda de cor de fundo até tema que dispositivo que você usa. Se você quiser alterar o plano de fundo do item para alguma outra cor, precisará aumentar seu layout emDrawerLayout
ouNavigationView
e manuseá-lo por conta própria.Esta é a outra maneira de conseguir isso:
}
fonte
Veja como você pode fazer isso no método onCreate de sua Activity:
fonte
Etapa 1: construir um seletor marcado / desmarcado:
selector.xml
Etapa 2: use o atributo xml
app:itemTextColor
dentro doNavigationView
widget para selecionar a cor do texto.Etapa 3:
por algum motivo, quando você clica em um item do
NavigationView
menu, isso não é considerado uma verificação de botão. Portanto, você precisa verificar manualmente o item selecionado e limpar o item selecionado anteriormente. Use o ouvinte abaixo para fazer issoEtapa 4:
para alterar a cor do ícone, use o
app:iconTint
atributo nosNavigationView
itens de menu e defina para o mesmo seletor.Resultado:
fonte