【问题标题】:Change toggleButton color更改切换按钮颜色
【发布时间】:2017-02-07 21:45:33
【问题描述】:

如何改变listView中toggleButton的颜色?

这就是我设计toggleButton的方式

<ToggleButton
            android:id="@+id/donePic"
            android:layout_width="30dp"
            android:layout_marginLeft="270dp"
            android:layout_height="30dp"
            android:background="@drawable/selector"
            android:focusable="false"
            android:focusableInTouchMode="false"
            android:textOff=""
            android:textOn=""/>

选择器

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- When selected, use tic -->
    <item android:drawable="@mipmap/done"
        android:state_checked="true" >
        <solid
            android:color="@color/red" />
    </item>
    <!-- When not selected, use un tic-->
    <item android:drawable="@mipmap/done"
        android:state_checked="false">
        <solid
            android:color="@color/green" />
    </item>

</selector>

我的活动

public View getView(int position, View convertView, ViewGroup parent) { // inside adapter class
        ViewHolder holder;   
        ToggleButton toggle;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.item_to_do, null);
            toggle =(ToggleButton)convertView.findViewById(R.id.donePic);
            toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (isChecked) {
                        Log.e("A","a");
                    } else {
                        // The toggle is disabled
                    }
                }
            });
            convertView.setTag(holder);
        }
        holder = (ViewHolder) convertView.getTag();
        return convertView;
    }

单击toggleButton 时显示log,但颜色仍为白色(其原始颜色)。如何更改toggleButton 的颜色?

更新

更新了我的代码,但颜色仍然是白色!我想使用 done.png 并已将其发送至res/drawable/done.png

选择器

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- When selected, use tic -->
    <item android:drawable="@drawable/toggle_on"
        android:state_checked="true" >
    </item>
    <!-- When not selected, use un tic-->
    <item android:drawable="@drawable/toggle_off"
        android:state_checked="false">
    </item>

</selector>

toggle_on

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/done"
        android:state_checked="true">
        <solid
            android:color="@color/green" />
    </item>
</selector>

toggle_off

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/done"
        android:state_checked="false">
        <solid
            android:color="@color/red" />
    </item>
</selector>

【问题讨论】:

  • 1 - 这个&lt;item android:drawable="@mipmap/done" 对于选中和未选中状态都是一样的:它应该是 2 个不同的可绘制对象。 2 - mipmaps 文件夹仅用于应用图标
  • @Rotwang android:tint 不能在选择器中使用?
  • android:tint 属性不适用于所有 API 级别。
  • @Rotwang 感谢您的告知
  • I want to use the done.png 正如我所说,你应该使用 2 pngs。我将它们命名为 done_on.pngdone_off.png

标签: android listview colors togglebutton


【解决方案1】:

试试这个方法。

切换按钮:

<ToggleButton 
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:textOn="On"
    android:textOff="Off"
    android:textSize="20sp"
    android:background="@drawable/toggle_day_bg_selector" />

toggle_day_bg_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:drawable="@drawable/toggle_off"
        android:state_checked="false"/>
    <item android:drawable="@drawable/toggle_on"
        android:state_checked="true"/>
</selector>

toggle_on.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"
    >
    <solid android:color="@color/red" />

</shape>

toggle_off.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval">
    <solid android:color="@color/green" />

</shape>

希望这会有所帮助。

编辑:

使用此可绘制文件在 ToggleButton 上显示图像

toggle_off.xml

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

    <item>
        <shape
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="oval" >
            <solid android:color="@android:color/holo_green_dark" />
        </shape>
    </item>
    <item android:drawable="@drawable/ic_launcher">
        <shape
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="oval" >
            <solid android:color="@android:color/holo_green_dark" />
        </shape>
    </item>

</layer-list>

toggle_on.xml

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

    <item>
        <shape
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="oval" >
            <solid android:color="@android:color/holo_red_dark" />
        </shape>
    </item>
    <item android:drawable="@drawable/ic_launcher">
        <shape
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="oval" >
            <solid android:color="@android:color/holo_red_dark" />
        </shape>
    </item>

</layer-list>

编码愉快..

【讨论】:

  • 这会给我一个勾选切换按钮吗?
  • 您可以根据需要修改形状文件。你可以将&lt;shape&gt; 包裹在&lt;item android:drawable="@drawable/done"&gt; 里面layer-list。我不确定。我还没有测试过。
  • 感谢您的回答。如果我不想有形状,只是用不同颜色的勾号,可以吗?
  • ofc。但它只会覆盖你切换按钮的默认形状。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-19
  • 2011-03-05
  • 2014-09-03
  • 2021-02-10
  • 2015-11-27
  • 2012-08-12
相关资源
最近更新 更多