Переключить кнопку, используя два изображения в разных состояниях

Мне нужно сделать кнопку переключения, используя два изображения вместо состояния ВКЛ / ВЫКЛ.

В выключенном состоянии я устанавливаю фоновое изображение, но текст OFF не может быть удален, пока я использую фоновое изображение.

И я не могу установить другое изображение в состояние ON, нажав кнопку переключения :( Я новичок в Android. Надеюсь, вы, ребята, поможете мне решить эту проблему


person MBMJ    schedule 16.07.2012    source источник
comment
Вы можете проверить: 1- stackoverflow.com/questions/1533038/ 2- stackoverflow.com/questions/6100034/   -  person Nermeen    schedule 16.07.2012


Ответы (3)


Сделай это:

<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>
person AkashG    schedule 16.07.2012
comment
Добавьте два изображения (выбрано / не выбрано) в check.xml, которые будут работать как два разных состояния кнопки переключения. - person AkashG; 16.07.2012
comment
Была ли у вас проблема с растяжением фона? - person Mike Bevz; 12.04.2013
comment
Нет, совсем нет @MikeBevz. Почему изображение растягивается? - person AkashG; 15.04.2013
comment
@MikeBevz Вы, вероятно, используете изображение с неправильным разрешением ... Попробуйте использовать изображения с другим разрешением! - person Saty; 24.04.2013
comment
Когда я устанавливаю селектор фона, фон переключателей просто прозрачный. Я проверил размер, цвет и т. Д. И даже применил другие селекторы, которые, как я знаю, работают. Любые идеи? - person speedynomads; 10.05.2013
comment
android: textOn = android: textOff = было то, что я искал - person png; 29.10.2013
comment
В чем причина установки focusable и focusableInTouchMode на false? - person AndroidGeek; 21.01.2015
comment
Я использовал переключатель с селектором, и фон выглядел нормально. Когда я попробовал этот подход, он растянул фон. Есть идеи, почему? - person Patrick; 01.06.2015
comment
Поскольку похоже, что у других тоже была эта проблема, я добавляю здесь свое решение. Добавьте android:background="@null" и android:drawableRight="@drawable/check". Обычно я обнаружил, что кнопки-переключатели выровнены по правому краю. Если вам нужно выровнять по левому краю, используйте android:drawableLeft - person Patrick; 01.06.2015
comment
Потрясающий мужик, android: textOn = android: textOff = отличная идея, спасибо - person Naveed Ahmad; 28.10.2015
comment
@Patrick Но что, если вы хотите, чтобы он был оправдан по центру? ... на всех устройствах. Так что не будем углубляться в поля и отступы. - person Martin Erlic; 10.12.2015

Решение 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>
person MistaGreen    schedule 31.07.2013
comment
ToggleButton имеет родительский CompoundButton. И CompoundButton имеет атрибут android: button: developer.android.com/reference/ android / - person MistaGreen; 17.06.2014
comment
Это должен быть правильный ответ. Принятый ответ приводит к растянутым чертежам. - person Bamerza; 23.08.2016
comment
Если изображения имеют прозрачность, можно использовать android:background="@android:color/transparent" - person Pavel; 14.06.2017
comment
@Bamerza, это тоже не относится ко всем случаям. Если вы попробуете с .svg, вы получите растянутый фон. - person Farid; 14.02.2019

Вы можете попробовать что-то подобное. Здесь при нажатии кнопки изображения я переключаю просмотр изображения.

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;
            }
        }
    });
person Srishti Roy    schedule 24.07.2014