Umschalttaste mit zwei Bildern in unterschiedlichem Zustand


101

Ich muss eine Umschalttaste mit zwei Bildern anstelle des EIN / AUS-Status erstellen.

Im ausgeschalteten Zustand setze ich ein Hintergrundbild. Der AUS-Text kann jedoch nicht entfernt werden, während ich das Hintergrundbild verwende.

Und ich kann kein anderes Bild in den EIN-Zustand versetzen, indem ich auf die Umschalttaste klicke :( Ich bin neu in Android. Ich hoffe, ihr hilft mir, dieses Problem zu lösen


Antworten:


219

Mach das:

<ToggleButton 
        android:id="@+id/toggle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/check"   <!--check.xml-->
        android:layout_margin="10dp"
        android:textOn=""
        android:textOff=""
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:layout_centerVertical="true"/>

Erstellen Sie check.xml in einem Zeichenordner

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- When selected, use grey -->
    <item android:drawable="@drawable/selected_image"
          android:state_checked="true" />
    <!-- When not selected, use white-->
    <item android:drawable="@drawable/unselected_image"
        android:state_checked="false"/>

 </selector>

1
Fügen Sie zwei Bilder (ausgewählt / nicht ausgewählt) in check.xml hinzu, die als zwei verschiedene Zustände der Umschalttaste
funktionieren

19
Hatten Sie ein Problem mit dem Strecken des Hintergrunds?
Mike Bevz

2
android: textOn = "" android: textOff = "" war das, wonach ich gesucht habe
png

9
Da es so aussieht, als hätten auch andere dieses Problem, füge ich hier meine Lösung hinzu. Hinzufügen android:background="@null"und android:drawableRight="@drawable/check". Normalerweise habe ich festgestellt, dass Umschalttasten rechtsbündig sind. Wenn Sie es linksbündig benötigen, verwenden Sieandroid:drawableLeft
Patrick

1
@Patrick Aber was ist, wenn Sie möchten, dass es zentriert ist? ... auf allen Geräten. Kommen wir also nicht zu Rändern und Polstern.
Martin Erlic

47

Die Lösung von AkashG funktioniert bei mir nicht. Wenn ich check.xml als Hintergrund einrichte, wird es nur in vertikaler Richtung gestreift. Um dieses Problem zu lösen, sollten Sie check.xml auf die Eigenschaft "android: button" einrichten:

<ToggleButton 
    android:id="@+id/toggle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:button="@drawable/check"   //check.xml
    android:background="@null"/>

check.xml:

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- When selected, use grey -->
    <item android:drawable="@drawable/selected_image"
          android:state_checked="true" />
    <!-- When not selected, use white-->
    <item android:drawable="@drawable/unselected_image"
          android:state_checked="false"/>
    </selector>

10
ToggleButton hat übergeordneten CompoundButton. Und CompoundButton hat android: button Attribut: developer.android.com/reference/android/…
MistaGreen

3
Dies sollte die richtige Antwort sein. Die akzeptierte Antwort führt zu gestreckten Zeichen.
Bamerza

Wenn Bilder transparent sind, android:background="@android:color/transparent"können verwendet werden
Pavel

@Bamerza, nein das gilt auch nicht für alle Fälle. Wenn Sie es mit .svg versuchen, erhalten Sie einen gestreckten Hintergrund.
Farid

2

Sie können so etwas versuchen. Hier schalte ich beim Klicken auf die Bildschaltfläche die Bildansicht um.

holder.imgitem.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            if(!onclick){
            mSparseBooleanArray.put((Integer) view.getTag(), true);
            holder.imgoverlay.setImageResource(R.drawable.ipad_768x1024_editmode_delete_overlay_com);
            onclick=true;}
            else if(onclick)
            {
                 mSparseBooleanArray.put((Integer) view.getTag(), false);
                  holder.imgoverlay.setImageResource(R.drawable.ipad_768x1024_editmode_selection_com);

            onclick=false;
            }
        }
    });
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.