59

我一直在尝试自定义切换按钮的外观,但没有成功。这是我希望它的样子:

在此处输入图像描述

有人可以给我一个教程吗?

4

4 回答 4

118

在 res/drawable 中创建 toggle_selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/toggle_on" android:state_checked="true"/>
  <item android:drawable="@drawable/toggle_off" android:state_checked="false"/>
</selector>

将选择器应用于切换按钮

<ToggleButton
            android:id="@+id/chkState"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/toggle_selector"
            android:textOff=""
            android:textOn=""/>

注意:为了删除我在上面的代码中使用的文本

textOff=""
textOn=""
于 2013-11-30T13:22:20.410 回答
9

我不知道这是否是最好的解决方案,但对我来说效果很好:

1.-决定你想要多大的切换按钮。在我的情况下,宽度为 56dp,高度为 76dp。

2.-为 mdpi 创建图标集 56px-76px,84px-113px hdpi,xhdpi 和 xxhdpi 相同

3.-移动相应drawable文件夹中的图标。在我的情况下,每个文件夹中有 20 个图标 5 个,名为 ic_name1_on, ic_name1_off [...] ic_name5_off

4.-在名为 drawable 的新文件夹中创建以下 xml 文件(如果尚不存在):

  • ic_name1_toggle.xml
  • ic_name1_toggle_bg.xml
  • ic_name2_toggle.xml
  • (...)
  • ic_name5_toggle_bg.xml

5.-在 ic_name1_toggle.xml 中,代码必须是:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_checked="false"
        android:drawable="@drawable/ic_name1_off" />
    <item
        android:state_checked="true"
        android:drawable="@drawable/ic_name1_on" />
</selector>

6.-在 ic_name1_toggle_bg.xml 中,代码必须是:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:id="@+android:id/background"
         android:drawable="@android:color/transparent" />
   <item android:id="@+android:id/toggle"
         android:drawable="@drawable/ic_name1_toggle" />
</layer-list>

7.-最后在你的 layout.xml 中:

<ToggleButton
                android:id="@+id/toggleButton1"
                android:layout_width="56dp"
                android:layout_height="76dp"
                android:background="@android:color/transparent"
                android:button="@drawable/ic_name1_toggle_bg"
                android:textOff=""
                android:textOn="" />
于 2014-07-28T15:41:05.840 回答
1

我认为您需要为按钮定义自定义背景。看看自定义按钮背景的开发人员指南。

但是,在第三步中,在res/drawable/ directoryUse this Xml 中创建一个新的 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_da"
          android:state_checked="true" />
    <item android:drawable="@drawable/button_nu" />
</selector>

该元素android:state_checked="true"将该状态定义为已检查的背景。

让我知道这是否适合您。

于 2013-09-11T20:35:41.560 回答
0

创建选择器

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/btn_da" android:state_checked="true"/>
    <item android:drawable="@drawable/btn_nu"/>
</selector>

并将其用作 ToggleButton 的背景。

于 2013-08-20T13:41:45.413 回答