Navigation Gaveta cor de fundo de item para item selecionado

? DemandedCross @ | Original: StackOverFlow
---

Eu usei Android Studio para implementar o Drawer Navigation e eu não posso obter a cor azul que é usado para mostrar qual seção estamos atualmente em mudar.

Eu tentei várias coisas, eu estou usando atualmente um listSelector que se parece com :

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_activated="true" android:drawable="@color/selected" />
    <item android:state_pressed="true" android:drawable="@color/highlight" />


</selector>

Eu também tentei state_checked . state_pressed Funciona nesta situação, mas o item selecionado no momento ainda é azul.

EDIT: Estive examinando isso mais e quando o adaptador é criado o contexto que é passado é getActionBar().getThemedContext(), então eu estou pensando se eu posso encontrar o atributo direito de ceder ao meu estilo ActionBar posso mudá-lo de lá. Eu tentei alguns atributos diferentes com nenhuma sorte. Alguém sabe o atributo exato ?

Eu também percebi que se eu colocar

<item name="android:activatedBackgroundIndicator">@drawable/nav_listview_selector</item>

na parte principal do meu tema e mudança getActionBar().getThemedContext() para getActivity.getBaseContext então eu posso mudar a cor, mas eu não acho que este é o caminho correto. Eu acho que o contexto temático deve ser usado. Então, se alguém sabe onde o activatedBackgroundIndicator poderia ser colocada de modo que seria usado em getActionBar.getThemedContext()

EDIT2:

Assim, a exibição de texto utilizado para a listview é um dentro do SDK que parece com isso:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:background="?android:attr/activatedBackgroundIndicator"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
/>

Então, eu tentei modificar o "?android:attr/activatedBackgroundIndicator" ao nível tema, mas não tem efeito para checar / seleccionado / activado mas não para pressionada. Alguém sabe por que isso é ? E como eu posso mudar isso?

---

Top 5 Responder

1stan0 @

Além de proporcionar um drawable selector personalizado para o listSelector, você também deve definir o recurso do item da lista de fundo a uma drawable selector similar que tem diferentes drawables para os diferentes estados.

2Ripityom @

Eu costumo usar meu adaptador personalizado que tem um campo de seleção int, e uma função setSelection (int) . E na função getView eu definir o plano de fundo da vista de acordo com a posição == seleção.

3DemandedCross @

Ainda não tenho certeza por que é que ele não funciona . Mas a maneira que eu encontrei em torno dela é usar o meu próprio simple_list_item_activated layout a ser passado para o ArrayAdapter que era basicamente o mesmo, exceto para definir a cor do texto para branco. Eu, então, substituído getActionBar().getThemedContext() com getActivity().getBaseContext() e agora tem um efeito.

Isto pode não ser a maneira correta e pode ter repercussões no futuro, mas por agora eu tenho que trabalhar do jeito que eu quero.

4Query @
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@color/list_item_back_pressed" android:state_pressed="true" />
    <item  android:state_activated="true"><color android:color="@color/primary_blue"/></item>
   <item android:drawable="@color/list_item_back_normal"/>

</selector>
5Bhavin Chauhan @

Tenho implementar menu de gaveta com classe adaptador personalizado . Pode ser que ajude alguém Lista Drawer

<ListView
    android:id="@+id/listview_drawer"
    android:layout_width="260dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="@color/menu_item_color"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:fadingEdge="none"
    />

drawer_list_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" 
android:background="@drawable/menu_selector"
>

<ImageView
    android:id="@+id/imgIcon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_marginLeft="12dp"
    android:layout_marginRight="12dp"
    android:src="@drawable/ic_menu_home" />

<TextView
    android:id="@+id/lblName"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_centerVertical="true"
    android:gravity="center_vertical"
    android:layout_toRightOf="@+id/imgIcon"
    android:minHeight="48dp"
    android:textColor="@color/menu_txt_color" />

menu_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<!-- selected -->
<item android:drawable="@color/menu_item_active_color" android:state_focused="true" android:state_pressed="false"/>
<item android:drawable="@color/menu_item_active_color" android:state_pressed="true"/>
<item android:drawable="@color/menu_item_active_color" android:state_activated="true"/>
<item android:drawable="@color/menu_item_active_color" android:state_checked="true"/>
<item android:drawable="@color/menu_item_active_color" android:state_selected="true"/>

<item android:drawable="@color/menu_item_color" android:state_activated="false"/>

Adicione esta no item Clique listner de listview yourlistview.setItemChecked (posição, true);