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.例如,on和off的状态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 .