【问题标题】:How to style ToggleButton so that the background color is WHITE?如何设置 ToggleButton 的样式以使背景颜色为白色?
【发布时间】:2015-03-04 02:33:16
【问题描述】:

我已经尝试了以下

View view = (View) findViewById (id);
view.setBackgroundColor (Color.WHITE);

以上内容破坏了 ToggleButton 的属性。我无法再确定它是 TextView 还是 ToggleButton。单击按钮会产生 onClick,但显示所选栏的 UI 更改不存在。

ToggleButton btn = (ToggleButton) findViewById (id);
btn.setBackgroundColor (Color.WHITE);

这也会产生同样的错误。使用 XML 样式也会导致相同的错误。我正在使用 Android Studio v1.0.2,目标是棒棒糖模拟器。我在 4.4.4 移动版中尝试过同样的事情。我看到了同样的行为。

我不想使用图片。请不要向我建议。我已经浏览了 stackoverflow 中可用的线程 - 对我来说没有任何用处。

谁能帮帮我?

【问题讨论】:

  • 您能否提供更多细节或草图,说明您希望切换按钮在每种状态(开/关)下的外观?您将需要为每个状态创建一个选择器和可能的可绘制对象。见:stackoverflow.com/a/1533412/2832027
  • 感谢您的链接。该线程讨论使用图像进行检查/取消检查事件。我不想那样做。但只需设置切换按钮的样式,使按钮颜色为白色。其他一切都保持不变。知道这是否可能吗?

标签: java android xml styles togglebutton


【解决方案1】:

它会像这样作为可绘制对象中的 xml 文件,作为切换按钮的背景。您需要将各种颜色添加到 res/values 中的颜色文件。见:https://developer.android.com/samples/MediaRouter/res/values/colors.html

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_checked="true" android:state_pressed="true">
        <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
            <item android:top="2dp">
                <shape android:shape="rectangle">
                    <solid android:color="@color/toggle_button_pressed" />
                </shape>
            </item>
            <item android:top="2dp" android:left="10dp" android:right="10dp">
                <shape android:shape="rectangle">
                    <solid android:color="@color/toggle_button_checked" />
                </shape>
            </item>
            <item android:top="2dp" android:bottom="2dp" android:left="10dp" android:right="10dp">
                <shape android:shape="rectangle">
                    <solid android:color="@color/toggle_button_pressed" />
                </shape>
            </item>
        </layer-list>    
    </item>

    <item android:state_pressed="true">
        <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
            <item android:top="2dp">
                <shape android:shape="rectangle">
                    <solid android:color="@color/toggle_button_pressed" />
                </shape>
            </item>
            <item android:top="2dp" android:left="10dp" android:right="10dp">
                <shape android:shape="rectangle">
                    <solid android:color="@color/toggle_button_unchecked" />
                </shape>
            </item>
            <item android:top="2dp" android:bottom="2dp" android:left="10dp" android:right="10dp">
                <shape android:shape="rectangle">
                    <solid android:color="@color/toggle_button_pressed" />
                </shape>
            </item>
        </layer-list>    
    </item>

    <item android:state_checked="true">
        <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
           <item>
                <shape android:shape="rectangle">
                    <solid android:color="@color/toggle_button_shadow" />
                </shape>
            </item>
            <item android:bottom="2dp">
                <shape android:shape="rectangle">
                    <solid android:color="@color/toggle_button_unpressed" />
                </shape>
            </item>
            <item android:bottom="2dp" android:left="10dp" android:right="10dp">
                <shape android:shape="rectangle">
                    <solid android:color="@color/toggle_button_checked" />
                </shape>
            </item>
            <item android:bottom="4dp" android:left="10dp" android:right="10dp">
                <shape android:shape="rectangle">
                    <solid android:color="@color/toggle_button_unpressed" />
                </shape>
            </item>
        </layer-list>
    </item>

    <item>
        <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
           <item>
                <shape android:shape="rectangle">
                    <solid android:color="@color/toggle_button_shadow" />
                </shape>
            </item>
            <item android:bottom="2dp">
                <shape android:shape="rectangle">
                    <solid android:color="@color/toggle_button_unpressed" />
                </shape>
            </item>
            <item android:bottom="2dp" android:left="10dp" android:right="10dp">
                <shape android:shape="rectangle">
                    <solid android:color="@color/toggle_button_unchecked" />
                </shape>
            </item>
            <item android:bottom="4dp" android:left="10dp" android:right="10dp">
                <shape android:shape="rectangle">
                    <solid android:color="@color/toggle_button_unpressed" />
                </shape>
            </item>
        </layer-list>
    </item>

</selector>

我没有检查它,所以我不知道它是否有效。如果我犯了任何错误,请告诉我。

【讨论】:

  • 非常感谢您!我可以看到 xml 有效:)
  • 即使这有效,我必须承认我不明白发生了什么。您能否详细说明 layer-list 的工作方式?例如,如果我想中风,我该怎么做?
  • 在图层列表中,列表最下方的项目显示在顶部。它显示了几个相互重叠的矩形。 Android drawables 有点棘手,就好像你指定一个带有高度和宽度的size 一样,你只能强制使用drawable 的大小。这就是为什么我通过给它们从视图边缘偏移来偏移矩形形状,如android:bottom="4dp"。要添加描边:(i)在彼此的顶部绘制两个矩形,第一个是描边颜色,第二个是填充颜色,(ii)向形状添加描边属性以在周围绘制描边它。
猜你喜欢
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 2017-09-04
相关资源
最近更新 更多