Tombol beralih menggunakan dua gambar pada status berbeda

101

Saya perlu membuat tombol sakelar menggunakan dua gambar alih-alih status ON / OFF.

Pada kondisi mati saya mengatur gambar latar belakang, tetapi teks MATI tidak dapat dihapus saat saya menggunakan gambar latar belakang.

Dan saya tidak dapat menyetel gambar lain ke status AKTIF dengan mengklik tombol sakelar :( Saya baru di android. Saya harap kalian membantu saya keluar dari masalah ini

MBMJ
sumber

Jawaban:

219

Melakukan hal ini:

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

buat check.xml di folder drawable

<?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
sumber
1
Tambahkan dua gambar (dipilih / tidak dipilih) di check.xml yang akan berfungsi sebagai dua status tombol
sakelar yang berbeda
19
Apakah Anda memiliki masalah dengan latar belakang yang direntangkan?
Mike Bevz
2
android: textOn = "" android: textOff = "" adalah yang saya cari
png
9
Karena sepertinya orang lain juga mengalami masalah ini, saya menambahkan solusi saya di sini. Tambahkan android:background="@null"dan android:drawableRight="@drawable/check". Biasanya saya menemukan tombol sakelar diratakan ke kanan. Jika Anda membutuhkannya rata kiri, gunakanandroid:drawableLeft
Patrick
1
@Patrick Tetapi bagaimana jika Anda ingin pusatnya dibenarkan? ... di semua perangkat. Jadi jangan masuk ke margin dan padding.
Martin Erlic
47

Solusi AkashG tidak berhasil untuk saya. Ketika saya menyiapkan check.xml ke latar belakang, itu hanya tergores dalam arah vertikal. Untuk mengatasi masalah ini, Anda harus menyiapkan check.xml ke properti "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>
MistaGreen
sumber
10
ToggleButton memiliki induk CompoundButton. Dan CompoundButton memiliki atribut android: button: developer.android.com/reference/android/…
MistaGreen
3
Ini harus menjadi jawaban yang benar. Jawaban yang diterima menghasilkan drawable yang diperpanjang.
Bamerza
Jika gambar memiliki transparansi, android:background="@android:color/transparent"dapat digunakan
Pavel
@Bamerza, tidak, ini juga tidak berlaku untuk semua kasus. Jika Anda mencobanya dengan .svg Anda akan mendapatkan latar belakang yang membentang.
Farid
2

Anda bisa mencoba sesuatu seperti ini. Di sini, di klik tombol gambar, saya beralih tampilan gambar.

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
sumber