【问题标题】:How to change indicator color in Toggle Button ( Android)如何在切换按钮 (Android) 中更改指示器颜色
【发布时间】:2016-09-14 01:35:49
【问题描述】:

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

See default indicator on imgur

【问题讨论】:

    标签: android togglebutton indicator


    【解决方案1】:

    我认为您将不得不创建 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" />
    

    然后是 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>
    

    bg_selected 和 bg_normal 只是类似于 9-patch 的图像。

    See the Android developer guide on 9-patch images

    【讨论】:

      【解决方案2】:

      虽然 Switch 与 Android 中的 ToggleButton 不同,但类似的问题被标记为重复。 How to change color of the toggle button? 两者都继承自CompoundButton;但有一些不同的方法和定制支持。 在别处张贴的setBackground 无法更改拇指或边框。下面是一个基于改变边框颜色的例子 How set background drawable programmatically in Android

      <?xml version="1.0" encoding="utf-8"?>
      <shape xmlns:android="http://schemas.android.com/apk/res/android"
      android:shape="rectangle">
      <corners android:radius="3dp" />
      <stroke android:width="2px" android:color="#000000" /> </shape>
      

      然后在代码中:

      if(!isChecked) {
          buttonView.setBackgroundResource(R.drawable.border_for_toggle_button);
      }
      

      因此,通过设置背景可以改变外观。要更改内部的整个颜色,可以在上面添加更多可绘制 XML;比如添加这个让里面变成绿色:

      <gradient android:startColor="#FFFFFF"
          android:endColor="#00FF00"
          android:angle="270" />
      

      【讨论】:

        【解决方案3】:

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

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

        在这里,您可以在 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" />
        

        【讨论】:

        • 如何在不更改底部栏的情况下也更改背景颜色?
        【解决方案4】:

        这是一个 XML 文件

        <Toggle Button
            android:id="@+id/my_location"
            android:textColor="#000"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAllCaps="false"
            android:theme="@style/ToggleButton"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true" />
        

        在你的 value-> 样式文件中设置这个样式

        <style name="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>
        

        【讨论】:

        • 如何更改背景颜色?
        【解决方案5】:

        当我使用this 时,上面的答案如下:

        <style name="AppTheme.ToggleButton" parent="Base.Widget.AppCompat.Button">
        <item name="colorButtonNormal">@color/red</item>
        <item name="colorAccent">@color/green</item>
        </style>
        

        我的整个切换按钮背景变成红色。

        如果您只想更改底部边框颜色,您可以改用:

        <style name="AppTheme.ToggleButton" parent="Base.Widget.AppCompat.Button">
            <item name="colorControlNormal">@color/red</item>
            <item name="colorAccent">@color/green</item>
        </style>    
        

        【讨论】:

          猜你喜欢
          • 2017-02-07
          • 1970-01-01
          • 2011-12-01
          • 1970-01-01
          • 2021-12-11
          • 2012-08-12
          • 2012-12-09
          • 2017-08-19
          相关资源
          最近更新 更多