Nút chuyển đổi sử dụng hai hình ảnh ở trạng thái khác nhau


101

Tôi cần tạo nút bật tắt bằng hai hình ảnh thay vì trạng thái BẬT / TẮT.

Ở trạng thái tắt, tôi đặt ảnh nền, nhưng không thể xóa văn bản TẮT khi tôi sử dụng ảnh nền.

Và tôi không thể đặt hình ảnh khác ở trạng thái BẬT bằng cách nhấp vào nút chuyển đổi :( Tôi là người mới trong Android. Mong các bạn giúp tôi thoát khỏi vấn đề này


Câu trả lời:


219

Làm cái này:

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

tạo check.xml trong thư mục có thể vẽ

<?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
Thêm hai hình ảnh (chọn / không được chọn) trong check.xml mà sẽ làm việc như hai trạng thái khác nhau của nút Toggle
AkashG

19
Bạn gặp sự cố với nền bị kéo căng?
Mike Bevz

2
android: textOn = "" android: textOff = "" là những gì tôi đang tìm kiếm
png

9
Vì có vẻ như những người khác cũng gặp sự cố này, tôi đang thêm giải pháp của mình ở đây. Thêm android:background="@null"android:drawableRight="@drawable/check". Thông thường, tôi thấy các nút bật tắt là hợp lý. Nếu bạn cần nó trái lý, sử dụngandroid:drawableLeft
Patrick

1
@Patrick Nhưng điều gì sẽ xảy ra nếu bạn muốn nó trung tâm hợp lý? ... trên tất cả các thiết bị. Vì vậy, chúng ta đừng đi vào lề và đệm.
Martin Erlic

47

Giải pháp của AkashG không phù hợp với tôi. Khi tôi thiết lập check.xml thành nền, nó chỉ bị trượt theo hướng thẳng đứng. Để giải quyết vấn đề này, bạn nên thiết lập check.xml thành thuộc tính "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 có CompoundButton cha. Và CompoundButton có android: nút thuộc tính: developer.android.com/reference/android/...
MistaGreen

3
Đây phải là câu trả lời chính xác. Câu trả lời được chấp nhận dẫn đến kéo dài các ngăn kéo.
Bamerza

Nếu hình ảnh có tính minh bạch, android:background="@android:color/transparent"có thể được sử dụng
Pavel

@Bamerza, không, điều này cũng không áp dụng cho mọi trường hợp. Nếu bạn thử nó với .svg, bạn sẽ nhận được nền kéo dài.
Farid

2

Bạn có thể thử một cái gì đó như thế này. Ở đây khi nhấp vào nút hình ảnh, tôi chuyển đổi chế độ xem hình ảnh.

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;
            }
        }
    });
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.