Перемикання кнопки за допомогою двох зображень у різному стані


101

Мені потрібно зробити кнопку перемикання, використовуючи два зображення замість стану ON / OFF.

У стані вимкнення я встановлюю фонове зображення. Але текст ВИМКНЕНО неможливо видалити, коли я використовую фонове зображення.

І я не можу встановити інше зображення на стан ON, натиснувши кнопку перемикання :( Я новачок в 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
У вас виникли проблеми з розтягнутим фоном?
Майк Бевз

2
android: textOn = "" android: textOff = "" було те, що я шукав
png

9
Оскільки, схоже, і інші мали цю проблему, я додаю тут своє рішення. Додайте android:background="@null"і android:drawableRight="@drawable/check". Зазвичай я вважаю, що кнопки перемикання правильно виправдані. Якщо вам це потрібно з лівого виправдання, використовуйтеandroid:drawableLeft
Патрік

1
@Patrick Але що, якщо ви хочете, щоб центр виправданий? ... на всіх пристроях. Тож давайте не будемо вникати в поля і прокладки.
Мартін Ерлік

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: developer.android.com/reference/android/…
MistaGreen

3
Це має бути правильна відповідь. Прийнята відповідь призводить до розтягнутих малюнків.
Бамерса

Якщо зображення мають прозорість, android:background="@android:color/transparent"можна використовувати
Павло

@Bamerza, ні це також не стосується всіх випадків. Якщо спробувати .svg, ви отримаєте розтягнутий фон.
Фарид

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;
            }
        }
    });
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.