我想使用Switch并更改其Track Color。所以在我看来没什么了不起的。
我的开关布局:
<Switch
android:id="@+id/Switch1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:track="@color/gray"
android:textOn="@string/on"
android:textOff="@string/off"
android:text="@string/musiconoff" />
和我的颜色&#34;灰色&#34;:
<color name="gray">#666666</color>
我的问题是Switch显示为1像素的Switch。这只是一条小线。如果我删除了&#34;颜色&#34; -line,那么Switch是正确的(当然没有灰色)。
我的错在哪里?
答案 0 :(得分:11)
除了这个
,没有什么对我有用if (isChecked) {
mSwtPrivacyView.getTrackDrawable().setColorFilter(ContextCompat.getColor(this, R.color.switch_track_checked_true_color), PorterDuff.Mode.SRC_IN);
} else {
mSwtPrivacyView.getTrackDrawable().setColorFilter(ContextCompat.getColor(this, R.color.switch_track_checked_false_color), PorterDuff.Mode.SRC_IN);
}
答案 1 :(得分:3)
以下代码解决了这个问题:
在您的活动/片段(XML)中:
<Switch
android:id="@+id/sMuteNotifications"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_margin="1dp"
android:checked="true"
android:gravity="center_vertical"
android:switchMinWidth="56dp"
android:thumb="@drawable/bg_thumb" // Create this drawable
android:track="@drawable/bg_switch_states"/> // and this one too
bg_thumb: (使用此图像或您想要的任何图像)
在您的
drawables
文件夹中创建
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="oval" xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@android:color/white"/>
<size android:width="28dp" android:height="28dp"/>
</shape>
bg_switch_states:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/bg_on_switch"/>
<item android:state_checked="false" android:drawable="@drawable/bg_off_switch"/>
</selector>
bg_on_switch:
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="18dip" />
<solid android:color="@color/colorPrimaryLight"/> // <---What ever color you want to use here
</shape>
bg_off_switch:
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="18dip" />
<solid android:color="@color/colorPrimaryDark"/> // <---What ever color you want to use here
</shape>
你去...
希望这对某人有帮助
答案 2 :(得分:2)
您可能希望使用灰色构建一个drawable,并将其放在res / drawable文件夹中:
track.xml:
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size android:width="48dp" android:height="22dp" />
<solid
android:color="#666666" />
<stroke
android:width="2dp"
android:color="#666666"
android:dashWidth="2dp"
android:dashGap="1dp" />
</shape>
添加您想要的笔划大小(如果需要),并将此drawable添加为轨道属性。
这有帮助吗?
答案 3 :(得分:0)
尝试此操作以更改开关的轨道颜色
android:track="@null"
android:background="@drawable/img_setings_toggle_on"
答案 4 :(得分:0)
这是一个非常简单的解决方案,对我有用。只需使用颜色选择器设置xml属性thumbTint和trackTint。轨道是背景部分,拇指是圆形部分。
<com.google.android.material.switchmaterial.SwitchMaterial
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:thumbTint="@color/switch_thumb"
app:trackTint="@color/switch_track" />
甚至更好地将以下项目添加到您的应用主题中,以应用于所有开关:
<item name="thumbTint">@color/switch_thumb</item>
<item name="trackTint">@color/switch_track</item>
switch_thumb.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/[your desired color]" android:state_checked="true" />
<item android:color="@color/[your desired color]" android:state_checked="false" />
</selector>
switch_track.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/[your desired color]" android:state_checked="true" />
<item android:color="@color/[your desired color]" android:state_checked="false" />
</selector>
答案 5 :(得分:-3)
android:track="@android:color/darker_gray"
在您的代码中尝试此操作