Przycisk przełączania za pomocą dwóch obrazów w innym stanie


101

Muszę zrobić przycisk przełączania za pomocą dwóch obrazów zamiast stanu WŁ. / WYŁ.

W stanie wyłączenia ustawiam obraz tła, ale tekstu OFF nie można usunąć, gdy używam obrazu tła.

I nie mogę ustawić innego obrazu na stan WŁĄCZONY, klikając przycisk przełączania :( Jestem nowy w Androidzie. Mam nadzieję, że pomożecie mi wyjść z tego problemu


Odpowiedzi:


219

Zrób to:

<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"/>

utwórz plik check.xml w folderze do rysowania

<?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
Dodaj dwa obrazy (zaznaczone / niezaznaczone) w pliku check.xml, które będą działać jako dwa różne stany przycisku przełączania
AkashG

19
Czy miałeś problem z rozciąganiem tła?
Mike Bevz,

2
android: textOn = "" android: textOff = "" był tym, czego szukałem
png

9
Ponieważ wygląda na to, że inni również mieli ten problem, dodaję tutaj moje rozwiązanie. Dodaj android:background="@null"i android:drawableRight="@drawable/check". Zwykle zauważyłem, że przyciski przełączania są wyjustowane do prawej. Jeśli potrzebujesz tego z wyrównaniem do lewej, użyjandroid:drawableLeft
Patrick

1
@Patrick Ale co, jeśli chcesz, aby centrum było uzasadnione? ... na wszystkich urządzeniach. Nie wchodźmy więc w marginesy i dopełnienie.
Martin Erlic,

47

Rozwiązanie AkashG nie działa dla mnie. Kiedy ustawiam plik check.xml w tle, jest on po prostu rysowany w kierunku pionowym. Aby rozwiązać ten problem, należy ustawić właściwość check.xml na „android: button”:

<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 ma element nadrzędny CompoundButton. A CompoundButton ma atrybut android: button: developer.android.com/reference/android/…
MistaGreen

3
To powinna być prawidłowa odpowiedź. Zaakceptowana odpowiedź skutkuje rozciągniętymi rysunkami.
Bamerza

Jeśli obrazy mają przezroczystość, android:background="@android:color/transparent"można ich użyć
Paweł

@Bamerza, nie, to też nie dotyczy wszystkich przypadków. Jeśli spróbujesz z .svg, uzyskasz rozciągnięte tło.
Farid

2

Możesz spróbować czegoś takiego. Tutaj po kliknięciu przycisku obrazu przełączam widok obrazu.

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;
            }
        }
    });
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.