webentwicklung-frage-antwort-db.com.de

Standardauswahlhintergrund in anklickbaren Ansichten

Ich habe einige anklickbare Ansichten und möchte den standardmäßig verfügbaren Hintergrund festlegen, der beim Klicken auf die Liste vorhanden ist (in ICS ist eine blaue Farbe). Ich habe versucht, dies als Hintergrund zu setzen:

Android:background="@Android:drawable/list_selector_background"

aber es ist nicht das Standard-Blau, das ich standardmäßig verwendet habe (das, das ich verwendet habe, ist Orange). Was ist das Drawable, das standardmäßig bei Android als Klickauswahl verwendet wird?

Vielen Dank

47
Matroska

Es ist list_selector_holo_dark oder die entsprechende Holo Light-Version. und dies sind die Standardwerte in Honeycomb und darüber. list_selector_background ist die Nicht-Holo-Version, die in Lebkuchen und darunter verwendet wird.

EDIT: I glaube (kann jedoch nicht bestätigen), dass der plattformunabhängige Wähler ?android:attr/listSelector

20
Alex Curran

Das funktioniert für mich: 

Android:background="?android:attr/selectableItemBackground"
152
Bogdan Balan

Wenn Sie appcompat-v7 verwenden, können Sie einfach ?attr/selectableItemBackground verwenden.

11
idunnololz

Es gibt eine Möglichkeit, alle gültigen Antworten zu kombinieren:

Definieren Sie ein Attribut (z. B. in values ​​/ attrs.xml):

<attr name="clickableItemBackground" format="reference"/>

Erklären Sie in Ihrem plattformabhängigen Themenbereich (z. B. in values ​​/ styles.xml oder values ​​/ themes.xml) Folgendes:

<style name="Theme.Platform" parent="@Android:style/Theme.Whatever">
        <item name="clickableItemBackground">@Android:drawable/list_selector_background</item>
</style>

In Ihrem plattformabhängigen Themenbereich für api-11 + (z. B. in values-v11/styles.xml oder values-v11/themes.xml) müssen Sie Folgendes angeben:

<style name="Theme.Platform" parent="@Android:style/Theme.Holo.Whatever">
        <item name="clickableItemBackground">?android:attr/selectableItemBackground</item>
</style>

Verwenden Sie dann ?attr/clickableItemBackground wo immer Sie möchten.

8
flx

Eine Lösung ähnlich der Antwort von flx, jedoch ohne zusätzliche Attributdefinition.

Plattformunabhängiger Stil für Pre-Holo-Geräte (in res\values\styles.xml):

<style name="SelectableItem">
    <item name="Android:background">@Android:drawable/list_selector_background</item>
</style>

Stil für Holo-Geräte (API Level 14+) (in res\values-v14\styles.xml):

<style name="SelectableItem">
    <item name="Android:background">?android:attr/selectableItemBackground</item>
</style>

Anwenden des Stils auf die erforderliche Ansicht, z. B. LinearLayout:

<LinearLayout
    style="@style/SelectableItem"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content">
...
</LinearLayout>
5

Dies funktioniert gut bei API 11 und höher. Aber wie bereits erwähnt, funktioniert es bei früheren Versionen nicht. 

Android:background="?android:attr/selectableItemBackground"

Hier ist eine Lösung, damit es auf allen Versionen Android läuft.

  1. Fügen Sie die entsprechenden Farben in der colors.xml hinzu, die sich in Ihrem Wertordner befindet. Es sollte so aussehen:

    <color name="white">#ffffff</color>
    <color name="blue">#7ecce8</color>
    
  2. Erstellen Sie eine XML-Selector-Datei. Hier habe ich es button_selection.xml genannt

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_pressed="true" Android:drawable="@color/blue"/>         <!--pressed -->
    <item Android:state_focused="true" Android:drawable="@color/blue"/> <!-- focused -->
    <item Android:drawable="@color/white"/> <!-- default -->
    </selector> 
    
  3. Gehen Sie zu Ihrer Ansicht oder Schaltfläche und legen Sie die neu erstellte button_selection.xml als Hintergrund fest.

    Android:background="@drawable/button_selection"
    
4

Alternative, 

Android:background="?android:attr/listChoiceBackgroundIndicator

wenn Sie möchten, dass die Elemente blau markiert werden (oder was auch immer der aktuelle Standard ist), während Sie auf sie klicken.

4
Colin

Wenn Sie Background einstellen, können Sie keine Hintergrundfarbe auswählen oder später zeichnen! !__. Ich empfehle Ihnen daher, diesen Stil zu Ihrem styles.xml hinzuzufügen:

<style name="TouchableView">
    <item name="Android:foreground">?android:attr/selectableItemBackground</item>
</style>

Und bei jeder Ansicht müssen Sie nur noch hinzufügen:

            Android:theme="@style/TouchableView"

LikeANYVIEW!

    <TextView
        Android:id="@+id/my_orders"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginRight="0dp"
        Android:theme="@style/TouchableView"
        Android:background="@color/white"
        Android:gravity="left"
        Android:padding="10dp"
        Android:text="@string/my_orders"
        Android:textColor="@color/gray"
        Android:textSize="14sp" />

Vergessen Sie nicht , um onClickListener hinzuzufügen, um die Ergebnisse anzuzeigen.

0
Morteza Rastgoo