5

我有一个切换按钮。我希望背景清晰,就像在一周中的默认警报应用程序中一样。下面的代码用清晰的颜色覆盖了切换。有没有办法在不滚动我自己的切换按钮的情况下保持切换和更改背景颜色?如果不是,那整个过程会很糟糕,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"
/>

这是我的colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="clear">#ffffff00</color>
</resources>

这是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>
4

3 回答 3

10

我希望背景清晰..

透明的?是的,android 确实为此定义了颜色。您可以通过以下方式访问它:

@android:color/transparent

或者,在代码中:

Color.TRANSPARENT

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

<color name="transparent">#00000000</color>

alpha 位(第一个和第二个)为零。

但是,您对颜色的定义clear

<color name="clear">#ffffff00</color>

不透明。_ 您可以将其可视transparent化为设置为零的任何颜色。在您对 的定义中,这些位已完全成熟到- 255 - 不透明。alphaclearalphaff

您的颜色定义会产生以下结果:

在此处输入图像描述

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

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

我希望背景清晰,就像在一周中的默认警报应用程序中一样..

将背景设置为透明将不起作用。我建议您仔细阅读制作ToggleButton. 例如, a 的onoff状态ToggleButtondrawable资源表示。因此,如果您决定更改背景,需要提供ToggleButton至少两个可绘制对象:每个状态一个。

看看默认警报应用程序是如何做到的。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"/>

drawabletoggle_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>

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

toggle_underline_activated并且toggle_underline_normal都是 9-patch 可绘制对象。

toggle_underline_activated.9.png:

在此处输入图像描述

toggle_underline_normal.9.png:

在此处输入图像描述

您可以在此处获取这些可绘制对象(以及更多):链接

因此,您可以创建自己的 9 个具有透明背景的补丁绘图,并将它们与状态选择器绘图一起使用 - 或者您可以查看默认闹钟项目并使用其drawable-XXXX文件夹中的绘图。

于 2014-08-19T04:46:14.323 回答
1

如果您只想更改 ToggleButton 的颜色而不丢失其“切换”,我发现的方法是在您的 style.xml 上为其创建一个主题:

<style name="AppTheme.Button" parent="Widget.AppCompat.Button.Colored">
    <item name="colorButtonNormal">@color/primary_dark</item>
    <item name="android:textColor">@color/accent</item>
</style>

然后在按钮的 xml 上设置主题:

    <ToggleButton
            android:id="@+id/part2"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:textOff="B"
            android:textOn="B"
            android:theme="@style/AppTheme.Button"/>

有了这个,我将按钮的颜色设置为我的 primary_dark 颜色,同时保持它的切换外观。

希望它可以帮助某人。

于 2017-06-20T17:57:06.417 回答
-1

尝试这个

<ToggleButton android:background="@color/buttoncolor" android:id="@+id/togglebutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textOn="ON" android:textOff="OFF"/>

创建值/color.xml

<color name="buttoncolor">#FF4000</color>

于 2014-08-24T11:49:14.927 回答