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

MBMJ
quelle

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>
AkashG
quelle
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>
MistaGreen
quelle
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;
            }
        }
    });
Srishti Roy
quelle