Wie mache ich das für jedes ausgewählte Listenelement?.
Ich habe versucht, dies zu Android:background
hinzuzufügen.
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_focused="true"
Android:state_pressed="false"
Android:drawable="@color/Android_green" />
<item Android:state_focused="true"
Android:state_pressed="true"
Android:drawable="@color/black_alpha" />
<item Android:state_focused="false"
Android:state_pressed="true"
Android:drawable="@color/black_alpha" />
<item Android:drawable="@color/white_alpha" />
</selector>
aber es funktioniert nicht, es ändert sich die gesamte ListView.
Immer noch nicht funktioniert, hier ist was ich bis jetzt habe
:: listview_background
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_focused="true" Android:drawable="@color/black_alpha" />
<item Android:drawable="@color/white_alpha" />
</selector>
:: Meine Ansicht, die das Obige verwendet
<ListView Android:id="@+id/list" Android:layout_width="fill_parent"
Android:layout_height="fill_parent" Android:layout_below="@+id/round"
Android:listSelector="@drawable/listview_background">
</ListView>
Das Problem ist, dass black_alpha die gesamte Liste anwendet, nicht nur das ausgewählte Listenelement
Hier ist ein guter Artikel , wie Selektoren mit Listen verwendet werden.
Anstatt es als Android:background
des ListView festzulegen, möchten Sie Android:listSelector
wie folgt einstellen:
<ListView Android:id="@+id/list"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:divider="@null"
Android:dividerHeight="0dip"
Android:listSelector="@drawable/list_selector" />
Jax, du hast das gesagt:
Das Problem ist, dass black_alpha die gesamte Liste anwendet, nicht nur das ausgewählte Listenelement
Ich hatte das gleiche Problem. Nachdem ich eine Weile mit ihm herumgespielt hatte, konnte ich die Farbe auf die gesamte Liste anwenden, indem ich ein 3x3-png-Bild der gewünschten Farbe verwendete, anstatt eine Farbe anzuwenden. Wenn Sie eine Farbe verwenden, haben Sie aus irgendeinem seltsamen Grund ein merkwürdiges Hintergrundverhalten. Wenn Sie ein png verwenden, funktioniert es einwandfrei. : S
Das ist also eine Möglichkeit, es zu umgehen.
-----Ein anderer Weg----------
Ich habe die besten Ergebnisse gefunden, wenn ich den ListView-Selector so eingestellt habe, dass er keine Zustände wie diese hat:
res/drawable/list_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
</selector>
Dann kümmere ich mich um alle Zustände im Hintergrund des Listenelements. NICHT in der Auswahl. Ich fand, dass ich auf diese Weise mehr Kontrolle hatte.
res/color/list_item_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_selected="false"
Android:state_pressed="false"
Android:drawable="@color/list_item_black_translucent" />
<item Android:state_pressed="true"
Android:drawable="@color/light_green_accent_translucent" />
</selector>
Dann ist hier mein Listeneintrag:
res/layout/simple_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:paddingRight="45dip"
Android:paddingBottom="2dip"
Android:layout_gravity="center_vertical"
Android:background="@color/list_item_bg">
<ImageView
Android:id="@+id/arrow"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginRight="8dip"
Android:src="@drawable/list_item_arrow" />
<TextView
Android:id="@+id/simple_list_item_label"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:gravity="center_vertical"
Android:textSize="12sp"
Android:textColor="@color/list_label_color"/>
</LinearLayout>
Ich stand auch vor Ihrem Problem, wo die Farbänderung für die gesamte Liste gilt.
Aber jetzt arbeitet es für mich:
Meine Hauptseite mit der Listenansicht (habe festgestellt, dass der Listenauswahlbereich hier nicht angewendet wurde):
<ListView
Android:id="@+id/controlList" Android:layout_width="wrap_content" Android:layout_height="wrap_content"/>
Anstatt den listselector auf getView zu übertragen, wird wie bei tell diese bestimmte Zeile (convertView) die listselector.xml in drawable foldable verwendet, wenn sich ihr Status ändert, z. gepresst, fokussiert ...:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null){
LayoutInflater li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
convertView = li.inflate(R.layout.control_list, null);
viewHolder = new ViewHolder();
viewHolder.topText = (TextView) convertView.findViewById(R.id.toptext);
viewHolder.bottomText = (TextView) convertView.findViewById(R.id.bottomtext);
convertView.setTag(viewHolder);
}
else{
viewHolder = (ViewHolder) convertView.getTag();
}
//each convertView will be assigned the listselector
convertView.setBackgroundResource(R.drawable.listselector);
viewHolder.topText.setText(testSchemes[position]);
//viewHolder.vText.setText(testDetails[position]);
return convertView;
}
Und zum Schluss noch meine listselector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="false"
Android:state_selected="false"
Android:drawable="@color/lightgreen" />
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item Android:state_pressed="true"
Android:drawable="@color/darkgreen" />
<item Android:state_selected="true" Android:state_pressed="false"
Android:drawable="@color/orange" />
</selector>
Der obige Code bewirkt Folgendes: Alle Einträge, die zum ersten Mal geladen werden, sind hellgrün . Wenn Sie den Cursor mit dem Cursor nach oben und unten bewegen, wird der ausgewählte Eintrag orange hervorgehoben.
Als Bigstones in einem Kommentar erwähnt, verwendet eine funktionierende Lösung eine Form anstelle einer Farbe (ich habe auch die gesamte Liste hervorgehoben). Hier ist eine Komplettlösung:
fügen Sie diese 2 Attribute zur Listenansicht hinzu:
Android:drawSelectorOnTop="true"
Android:listSelector="@drawable/my_list_selector"
fügen Sie my_list_selector.xml dem drawable-Ordner hinzu:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle">
<solid Android:color="#77526F35"/>
</shape>
Jetzt sollten die Listenelemente im gedrückten Zustand eine semitransparente grüne Überlagerung anzeigen.
Ich war mit dem gleichen Problem konfrontiert und brauchte nur eine einfache Zeile in meiner Artikelansicht-XML.
Android:background="?android:attr/activatedBackgroundIndicator"
Überprüfen Sie diesen Beitrag: Dieser Beitrag könnte helfen