在不同状态下使用两个图像切换按钮


101

我需要使用两个图像而不是打开/关闭状态来制作切换按钮。

在关闭状态下,我会设置背景图片。但是当我使用背景图片时,无法删除OFF文本。

而且我无法通过单击切换按钮将其他图像设置为ON状态:(我是android新手。希望大家帮我摆脱这个问题


Answers:


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,2012年

19
您有背景拉伸的问题吗?
Mike Bevz

2
android:textOn =“” android:textOff =“”是我想要的
png

9
由于看起来其他人也有此问题,因此我在此处添加解决方案。添加android:background="@null"android:drawableRight="@drawable/check"。通常我发现切换按钮是右对齐的。如果需要左对齐,请使用android:drawableLeft
Patrick

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有安卓按钮属性:developer.android.com/reference/android/...
MistaGreen

3
这应该是正确的答案。接受的答案会导致拉伸的可绘制对象。
巴梅尔扎

如果图像具有透明度,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;
            }
        }
    });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.