ปุ่มสลับโดยใช้สองภาพในสถานะที่ต่างกัน


101

ฉันต้องสร้างปุ่มสลับโดยใช้สองภาพแทนสถานะเปิด / ปิด

ในสถานะปิดฉันตั้งค่าภาพพื้นหลัง แต่ข้อความปิดไม่สามารถลบออกได้ในขณะที่ฉันใช้ภาพพื้นหลัง

และฉันไม่สามารถตั้งค่ารูปภาพอื่นในสถานะเปิดได้โดยคลิกที่ปุ่มสลับ :( ฉันเป็นคนใหม่ใน Android ฉันหวังว่าพวกคุณจะช่วยฉันให้พ้นจากปัญหานี้


คำตอบ:


219

ทำเช่นนี้:

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

สร้าง 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>

1
เพิ่มภาพสองภาพ (เลือก / ไม่ได้เลือก) ใน check.xml ซึ่งจะทำงานเป็นสองสถานะที่แตกต่างกันของปุ่มสลับ
AkashG

19
คุณมีปัญหาเกี่ยวกับการยืดพื้นหลังหรือไม่?
Mike Bevz

2
android: textOn = "" android: textOff = "" คือสิ่งที่ฉันกำลังมองหา
png

9
เนื่องจากดูเหมือนว่าคนอื่น ๆ ก็มีปัญหานี้เช่นกันฉันจึงเพิ่มวิธีแก้ปัญหาที่นี่ เพิ่มandroid:background="@null"และandroid:drawableRight="@drawable/check". โดยปกติแล้วฉันพบว่าปุ่มสลับนั้นถูกต้อง หากคุณต้องการใช้แบบชิดซ้ายให้ใช้android:drawableLeft
Patrick

1
@Patrick แต่ถ้าคุณต้องการให้ศูนย์เป็นธรรมล่ะ ... ในทุกอุปกรณ์ ดังนั้นอย่าเข้าไปในระยะขอบและช่องว่างภายใน
Martin Erlic

47

วิธีแก้ปัญหาของ AkashG ไม่ได้ผลสำหรับฉัน เมื่อฉันตั้งค่า check.xml เป็นพื้นหลังมันเป็นเพียงการแบ่งชั้นในแนวตั้ง ในการแก้ปัญหานี้คุณควรตั้งค่าคุณสมบัติ check.xml เป็น "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 มี CompoundButton หลัก และ CompoundButton มี android: button attribute: developer.android.com/reference/android/…
MistaGreen

3
นี่น่าจะเป็นคำตอบที่ถูกต้อง คำตอบที่ยอมรับส่งผลให้มีการยืด
Bamerza

หากภาพมีความโปร่งใสandroid:background="@android:color/transparent"สามารถใช้ได้
Pavel

@Bamerza ไม่ใช้กับทุกกรณีเช่นกัน ถ้าคุณลองใช้. svg คุณจะได้พื้นหลังที่ยืดออก
Farid

2

คุณสามารถลองสิ่งนี้ ที่นี่เมื่อคลิกปุ่มภาพฉันสลับมุมมองภาพ

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;
            }
        }
    });
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.