使用两张不同状态的图片制作切换按钮

104

我需要使用两张图片制作一个开关按钮,而不是使用ON/OFF状态。

在关闭状态下,我设置了一个背景图片。但当我使用背景图片时,无法去除OFF文本。

并且我无法通过点击开关按钮来设置另一张ON状态的图片。:( 我是Android方面的新手。希望你们能帮助我解决这个问题。


2
您可以查看以下内容:
1- https://dev59.com/5HI_5IYBdhLWcg3wFu7L
2- https://dev59.com/gm025IYBdhLWcg3wST6Q
- Nermeen
请注意,如果您只使用图像进行切换,您可以像这样做:https://dev59.com/_2035IYBdhLWcg3wbPU5#15322619 - android developer
3个回答

228

请这样做:

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

在drawable文件夹中创建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
21
你的背景被拉伸了吗?有问题吗? - Mike Bevz
2
android:textOn="" android:textOff="" 是我正在寻找的内容。 - png
9
由于看起来其他人也遇到了这个问题,我在这里添加我的解决方案。添加 android:background="@null"android:drawableRight="@drawable/check"。通常我发现切换按钮是右对齐的。如果您需要左对齐,请使用 android:drawableLeft - Patrick
2
@Patrick 但是如果你想要它在所有设备上都居中对齐呢?所以我们不要涉及边距和填充。 - Martin Erlic
显示剩余6条评论

48

AkashG的解决方案对我无效。当我将check.xml设置为背景时,它只是在垂直方向上被拉伸。要解决这个问题,您应该将check.xml设置为“android:button”属性:

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属性:http://developer.android.com/reference/android/R.styleable.html#CompoundButton_button - MistaGreen
3
这应该是正确的答案。接受的答案会导致可拉伸的drawable。 - Bamerza
如果图片具有透明度,则可以使用android:background="@android:color/transparent" - Pavel
@Bamerza,不是所有情况都适用。如果你尝试使用.svg格式,背景会被拉伸。 - Farid
如果我不想使用文本,只想使用可绘制对象,还有可能吗? - android developer

2
你可以尝试类似这样的东西。 在点击图像按钮时,我切换了ImageView。
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;
            }
        }
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接