如何更改切换按钮中的指示器颜色(Android)

use*_*034 4 android indicator togglebutton

大家好,我想使用切换按钮,但具有不同的指示器颜色(如绿色或红色),如何更改指示器的颜色。

查看 imgur 上的默认指示器

小智 5

我认为您必须创建 2 个按钮的自定义图像,然后使用可绘制的 xml 作为背景。

例如:

<ToggleButton
    android:id="@+id/toggleButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/btntoggle_selector"
    android:textColor="@android:color/white"
    android:textOff="Toggle Button OFF"
    android:textOn="Toggle Button ON "
    android:onClick="onToggleButtonClick" />
Run Code Online (Sandbox Code Playgroud)

然后 btntoggle_selector xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/bg_selected" android:state_checked="true" android:state_pressed="true"/>
    <item android:drawable="@drawable/bg_selected" android:state_checked="true" android:state_focused="false"/>
    <item android:drawable="@drawable/bg_normal" android:state_checked="false" android:state_pressed="true"/>
    <item android:drawable="@drawable/bg_normal" android:state_checked="false" android:state_focused="false"/>
</selector>
Run Code Online (Sandbox Code Playgroud)

bg_selected 和 bg_normal 只是像 9-patch 这样的图像。

请参阅有关 9 补丁图像的 Android 开发人员指南


Mic*_*bro 5

我认为如果变化不大,你可以使用主题。

<style name="AppTheme.ToggleButton" parent="Base.Widget.AppCompat.Button">
    <item name="colorButtonNormal">@color/colorPrimary</item>
    <item name="android:textColor">@android:color/white</item>
    <item name="colorAccent">@android:color/white</item>
</style>
Run Code Online (Sandbox Code Playgroud)

在这里您可以在 ToggleButton 上使用这个新主题。

<ToggleButton
    android:id="@+id/keyboard_caps_lock_btn"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="2"
    android:minWidth="0dp"
    android:textOff="@string/keyboard_caps_lock"
    android:textOn="@string/keyboard_caps_lock"
    android:textAllCaps="false"
    android:theme="@style/AppTheme.ToggleButton" />
Run Code Online (Sandbox Code Playgroud)