您是否可以在切换按钮上设置背景颜色而不会遮盖切换按钮?

Tyl*_*aff 5 android android-layout statelistdrawable android-togglebutton

我有一个ToggleButton.我希望背景清晰,就像一周中几天的默认闹钟应用程序一样.下面的代码涵盖了清晰颜色的切换.有没有办法保持切换和更改背景颜色而不滚动我自己的切换按钮?如果没有,整个过程都会非常糟糕,imo.另外,我真的必须在这里定义一个清晰的颜色,还是我可以在我的xml中使用内置的清晰颜色?

 <ToggleButton
    android:background="@drawable/clear_toggle_button"
    android:id="@+id/btn_sunday"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:textOn="SUN"
    android:textOff="SUN"
/>
Run Code Online (Sandbox Code Playgroud)

这是我的colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="clear">#ffffff00</color>
</resources>
Run Code Online (Sandbox Code Playgroud)

这是我在drawable文件夹中的颜色状态列表xml .

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_focused="true"
        android:state_pressed="false"
        android:drawable="@color/clear" />
    <item
        android:state_focused="true"
        android:state_pressed="true"
        android:drawable="@color/clear" />
</selector>
Run Code Online (Sandbox Code Playgroud)

Vik*_*ram 10

我希望背景清晰..

透明?是的,android确实有为此定义的颜色.您可以访问它:

@android:color/transparent
Run Code Online (Sandbox Code Playgroud)

或者,在代码中:

Color.TRANSPARENT
Run Code Online (Sandbox Code Playgroud)

@android:color/transparent定义res/values/colors.xml如下:

<color name="transparent">#00000000</color>
Run Code Online (Sandbox Code Playgroud)

alpha位(第一和第二)为零.

但是,你对颜色的定义clear:

<color name="clear">#ffffff00</color>
Run Code Online (Sandbox Code Playgroud)

不是透明的.您可以将其设置为零,将其显示transparent任何颜色.在你的定义中,这些位是完全成熟的- 255 - 不透明.alphaclearalphaff

你的颜色定义产生了这个:

在此输入图像描述

有没有办法保持切换和更改背景颜色而不滚动我自己的切换按钮?

问题是:背景颜色和切换是一个可绘制的.整个"开启"状态由一个可绘制状态表示,"关闭"状态也是如此.您不能简单地更改颜色而不会丢失toggle反馈.要更改有关默认ToggleButton's背景的任何内容,您必须为每个州提供备用drawable.

我希望背景清晰,就像一周中几天的默认闹钟应用程序一样.

背景设置为透明将无法再正常工作.我建议你仔细阅读制作a的源代码和资源ToggleButton.例如,onoff的状态ToggleButton由下式表示drawable的资源.因此,如果您决定更改背景,需要提供ToggleButton至少两个drawable:每个州一个drawable.

看看默认的警报应用程序是如何做到的.所述ToggleButtons用于感days被定义为:

<ToggleButton
    android:layout_width="wrap_content"
    android:layout_height="48dp"
    android:layout_gravity="center"
    android:padding="0dp"
    style="@style/body"
    android:textColor="@color/clock_gray"
    **android:background="@drawable/toggle_underline"**
    android:clickable="false"
    android:singleLine="true"/>
Run Code Online (Sandbox Code Playgroud)

drawable toggle_underline是一个状态选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:state_window_focused="true"
          android:drawable="@drawable/toggle_underline_activated"/>
    <item android:state_checked="true"
          android:drawable="@drawable/toggle_underline_activated"/>
    <item
          android:drawable="@drawable/toggle_underline_normal"/>
</selector>
Run Code Online (Sandbox Code Playgroud)

如您所见,当ToggleButton设置为on or checked(或当它pressed)时,@drawable/toggle_underline_activated设置为背景.否则,@drawable/toggle_underline_normal使用 - 状态是off.

toggle_underline_activated并且toggle_underline_normal都是9-patch drawables.

toggle_underline_activated.9.png:

在此输入图像描述

toggle_underline_normal.9.png:

在此输入图像描述

你可以在这里获得这些drawables(以及更多):链接.

因此,您可以使用透明背景创建自己的9个补丁drawable,并使用状态选择器drawable - 或者您可以查看默认闹钟项目并使用其drawable-XXXX文件夹中的drawables .