Thay đổi màu sắc trên nền màu của một công tắc


156

Tôi đang sử dụng điều khiển Chuyển đổi tiêu chuẩn với chủ đề holo.light trong ứng dụng ICS.

Tôi muốn thay đổi màu được tô sáng hoặc trên trạng thái của Nút Chuyển đổi từ màu xanh nhạt tiêu chuẩn sang màu xanh lục.

Điều này sẽ dễ dàng, nhưng tôi dường như không thể tìm ra cách để làm điều đó.


Tôi thực sự không thấy bất kỳ cách nào khác ngoài việc sao chép các tài nguyên nền tảng có liên quan (tệp chọn và * .png) và sửa đổi trạng thái có thể rút ra được. Đừng quên trỏ Switchđến bộ chọn tùy chỉnh này sau đó.
MH.

Câu trả lời:


100

Đến bây giờ, tốt hơn là sử dụng SwitchCompat từ thư viện AppCompat.v7. Sau đó, bạn có thể sử dụng kiểu dáng đơn giản để thay đổi màu sắc của các thành phần của bạn.

values/themes.xml:

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">
    <!-- colorPrimary is used for the default action bar background -->
    <item name="colorPrimary">@color/my_awesome_color</item>

    <!-- colorPrimaryDark is used for the status bar -->
    <item name="colorPrimaryDark">@color/my_awesome_darker_color</item>

    <!-- colorAccent is used as the default value for colorControlActivated,
         which is used to tint widgets -->
    <item name="colorAccent">@color/accent</item>

    <!-- You can also set colorControlNormal, colorControlActivated
         colorControlHighlight, and colorSwitchThumbNormal. -->

</style>

ref: Blog nhà phát triển Android

CHỈNH SỬA :

Cách thức áp dụng chính xác là thông qua android:theme="@style/Theme.MyTheme" và cũng có thể áp dụng điều này cho các kiểu cha mẹ như EditTexts, RadioButtons, Switches, CheckBoxes và ProgressBars:

<style name="My.Widget.ProgressBar" parent="Widget.AppCompat.ProgressBar">

<style name="My.Widget.Checkbox" parent="Widget.AppCompat.CompoundButton.CheckBox">

1
Mặc dù không áp dụng tại thời điểm đó, đây nên là câu trả lời được chấp nhận!
Andrew Gallasch

Đã thay đổi câu trả lời này thành câu trả lời được chấp nhận, vì có vẻ như cách tiếp cận "hiện đại" hơn cho câu hỏi này.
JamesSugrue

1
Tôi đã thử tất cả những thứ này và không ai trong số chúng thay đổi màu của trạng thái "bật" cho công tắc của tôi.
Adam Johns

31
'trên' là colorAccent, 'tắt' là colorSwitchThumbNormal. Nếu sử dụng AppCompatchủ đề, bạn cần sử dụng SwitchCompatchứ không phải Switch. Nếu sử dụng SDK 23+, bạn có thể sử dụng android:thumbTintandroid:thumbTintModevới một ColorStateList.
Tom

1
@Tom plz sẽ trả lời những thứ 'android: thumbTint' sẽ hoạt động trên các thiết bị <23
Shirish Herwade

269

Đi dự tiệc muộn nhưng đây là cách tôi đã làm

Phong cách

 <style name="SCBSwitch" parent="Theme.AppCompat.Light">
        <!-- active thumb & track color (30% transparency) -->
        <item name="colorControlActivated">#46bdbf</item>

        <!-- inactive thumb color -->
        <item name="colorSwitchThumbNormal">#f1f1f1
        </item>

        <!-- inactive track color (30% transparency) -->
        <item name="android:colorForeground">#42221f1f
        </item>
    </style>

Màu sắc

nhập mô tả hình ảnh ở đây

Bố trí

<android.support.v7.widget.SwitchCompat
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:checked="false"
    android:theme="@style/SCBSwitch" />

Kết quả

Xem thay đổi màu sắc để bật và tắt công tắc

nhập mô tả hình ảnh ở đây


14
@MaksimKniazev Bạn phải sử dụng SwitchCompat;)
Ovi Trif

1
Tốt, ngoại trừ colorControlActivated - nó không đặt màu theo dõi, chỉ màu ngón tay cái.
Con trỏ Null

1
đây là giải pháp cho Switch và SwitchCompat: stackoverflow.com/a/47036089/5869630
roghayeh hosseini

Các thẻ <style> cần được viết trong res >> value >> style.xml và trên trang XML cho <Switch ...> bạn chỉ nên thêm dòng có tên: android: theme = "@ style / SCBSwitch và màu của tôi là : colorControlActivated "> # ff0000 và colorSwitchThumbN normal"> # 00ff00 và android: colorForeground "> # 00ff00
Bay

@OviTrif Tuyệt vời! Thật ấn tượng khi tìm thấy một thông tin đơn giản như thế thật khó. Rất nhiều và rất nhiều câu trả lời tôi đã đọc, và không ai, đã đưa ra một câu trả lời làm việc cho đến bây giờ. Cuối cùng!
jairhumber đến

49

Điều này phù hợp với tôi (yêu cầu Android 4.1):

Switch switchInput = new Switch(this);
int colorOn = 0xFF323E46;
int colorOff = 0xFF666666;
int colorDisabled = 0xFF333333;
StateListDrawable thumbStates = new StateListDrawable();
thumbStates.addState(new int[]{android.R.attr.state_checked}, new ColorDrawable(colorOn));
thumbStates.addState(new int[]{-android.R.attr.state_enabled}, new ColorDrawable(colorDisabled));
thumbStates.addState(new int[]{}, new ColorDrawable(colorOff)); // this one has to come last
switchInput.setThumbDrawable(thumbStates);

Lưu ý rằng trạng thái "mặc định" cần được thêm vào cuối cùng như được hiển thị ở đây.

Vấn đề duy nhất tôi thấy là "ngón tay cái" của công tắc hiện có vẻ lớn hơn nền hoặc "rãnh" của công tắc. Tôi nghĩ đó là bởi vì tôi vẫn đang sử dụng hình ảnh theo dõi mặc định, có một số khoảng trống xung quanh nó. Tuy nhiên, khi tôi cố gắng tùy chỉnh hình ảnh theo dõi bằng kỹ thuật này, công tắc của tôi dường như có chiều cao 1 pixel chỉ với một đoạn văn bản bật / tắt xuất hiện. Phải có một giải pháp cho điều đó, nhưng tôi chưa tìm thấy nó ...

Cập nhật cho Android 5

Trong Android 5, đoạn mã trên khiến công tắc biến mất hoàn toàn. Chúng ta có thể sử dụng phương thức setButtonTintList mới , nhưng điều này dường như bị bỏ qua cho các công tắc. Nhưng điều này hoạt động:

ColorStateList buttonStates = new ColorStateList(
        new int[][]{
                new int[]{-android.R.attr.state_enabled},
                new int[]{android.R.attr.state_checked},
                new int[]{}
        },
        new int[]{
                Color.BLUE,
                Color.RED,
                Color.GREEN
        }
);
switchInput.getThumbDrawable().setTintList(buttonStates);
switchInput.getTrackDrawable().setTintList(buttonStates);

Cập nhật cho Android 6-7

Như Cheruby đã nêu trong các bình luận, chúng tôi có thể sử dụng cái mới setThumbTintListvà nó hoạt động như mong đợi đối với tôi. Chúng ta cũng có thể sử dụng setTrackTintList, nhưng điều đó áp dụng màu sắc như một sự pha trộn, với kết quả là tối hơn mong đợi trong các chủ đề màu tối và sáng hơn mong đợi trong các chủ đề màu sáng, đôi khi đến mức vô hình. Trong Android 7, tôi đã có thể giảm thiểu sự thay đổi đó bằng cách ghi đè chế độ theo dõi , nhưng tôi không thể nhận được kết quả tốt từ đó trong Android 6. Bạn có thể cần xác định các màu bổ sung bù cho pha trộn. (Bạn có bao giờ có cảm giác rằng Google không muốn chúng tôi tùy chỉnh giao diện của ứng dụng của mình không?)

ColorStateList thumbStates = new ColorStateList(
        new int[][]{
                new int[]{-android.R.attr.state_enabled},
                new int[]{android.R.attr.state_checked},
                new int[]{}
        },
        new int[]{
                Color.BLUE,
                Color.RED,
                Color.GREEN
        }
);
switchInput.setThumbTintList(thumbStates);
if (Build.VERSION.SDK_INT >= 24) {
    ColorStateList trackStates = new ColorStateList(
            new int[][]{
                    new int[]{-android.R.attr.state_enabled},
                    new int[]{}
            },
            new int[]{
                    Color.GRAY,
                    Color.LTGRAY
            }
    );
    switchInput.setTrackTintList(trackStates);
    switchInput.setTrackTintMode(PorterDuff.Mode.OVERLAY);
}

Tôi đang sử dụng phương pháp getThumbDrawable / getTrackDrawable để tạo một công tắc trong đó cả hai trạng thái có cùng màu - nói cách khác, công tắc không bật / tắt thứ gì đó, nhưng được sử dụng cho lựa chọn giữa hai lựa chọn thay thế.
Natix

4
Có rằng DrawableCompat.setTintList sẽ cho phép nó hoạt động trên các thiết bị trước đó. Tôi gọi: DrawableCompat.setTintList (switchCompat.getThumbDrawable (), foregroundState);
Alexey

Vui lòng chỉnh sửa câu trả lời để bao gồm giải pháp DrawableCompat. Nó hoạt động hoàn hảo!
Dmytro Karataiev

API 23+: cũng switchInput.setThumbTintList(buttonStates); hoạt động cho Nougat. API 21-22: Sử dụng DrawableCompat theo đề xuất của @Alexey. Công switchInput.setButtonTintList(buttonStates);việc không phù hợp với tôi, nó không tô màu các trạng thái cho Switch của tôi. API dưới 21: switchInput.getThumbDrawable().setColorFilter(someColor, PorterDuff.Mode.SrcIn); Chúng hoạt động với tôi. Tôi cũng đã làm việc với Xamarin, vì vậy hãy dịch chúng sang C # trong trình kết xuất Android nếu bạn sử dụng Xamarin.Forms.
Cheruby

37

Để thay đổi kiểu Chuyển đổi mà không sử dụng mã style.xml hoặc mã Java, bạn có thể tùy chỉnh chuyển đổi thành bố cục XML:

<Switch
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:thumbTint="@color/blue"
        android:trackTint="@color/white"
        android:checked="true"
        android:layout_height="wrap_content" />

Đó là thuộc tính android: thumbTintandroid: trackTint cho phép bạn tùy chỉnh màu sắc

Đây là kết quả trực quan cho XML này:

nhập mô tả hình ảnh ở đây


17
Điều này thay đổi màu sắc của ngón tay cái, bất kể nó bật hay tắt.
nhà phát triển Android

1
"ThumbTint thuộc tính chỉ được sử dụng trong API cấp 21 trở lên"
norbDEV

6
@norbDEV sử dụng ứng dụng: thumbTint và ứng dụng: trackTint với SwitchCompat từ thư viện AppCompat.v7 để có mức API thấp hơn.
David Darias

Điều đó hoạt động, nhưng nếu bạn muốn thay đổi màu sắc cho ngón tay cái, tùy thuộc vào việc nó bật hay tắt?
TavernSenses

2
Nếu bạn muốn sử dụng thumbTint dưới 21, hãy sử dụng app:thumbTintthay vì android:thumbTintvà thay đổi switchbằngSwitchCompat
Kavita_p

33

Tạo một tùy chỉnh Chuyển đổi và ghi đè setChecked để thay đổi màu sắc:

  public class SwitchPlus extends Switch {

    public SwitchPlus(Context context) {
        super(context);
    }

    public SwitchPlus(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SwitchPlus(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void setChecked(boolean checked) {
        super.setChecked(checked);
        changeColor(checked);
    }

    private void changeColor(boolean isChecked) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            int thumbColor;
            int trackColor;

            if(isChecked) {
                thumbColor = Color.argb(255, 253, 153, 0);
                trackColor = thumbColor;
            } else {
                thumbColor = Color.argb(255, 236, 236, 236);
                trackColor = Color.argb(255, 0, 0, 0);
            }

            try {
                getThumbDrawable().setColorFilter(thumbColor, PorterDuff.Mode.MULTIPLY);
                getTrackDrawable().setColorFilter(trackColor, PorterDuff.Mode.MULTIPLY);
            }
            catch (NullPointerException e) {
                e.printStackTrace();
            }
        }
    }
}

2
Bài đăng đầu tiên thực sự giúp tôi đạt được màu tùy chỉnh cho Chuyển đổi vật liệu mà không cần sử dụng kiểu hoặc chủ đề. Cảm ơn !
Mackovich

1
Đẹp. Tôi đã có Công tắc tùy chỉnh của riêng mình, vì vậy tôi chỉ phải ghi đè phương thức setChecked và tất cả chúng đều tự động thay đổi màu sắc. Cảm ơn từ Tây Ban Nha.
Julio

22

Mặc dù câu trả lời của SubChord là chính xác, nhưng thực sự không trả lời câu hỏi làm thế nào để đặt màu "bật" mà không ảnh hưởng đến các vật dụng khác. Để thực hiện việc này, hãy sử dụng một ThemeOverlaytệp in tệp:

<style name="ToggleSwitchTheme" parent="ThemeOverlay.AppCompat.Light">
    <item name="colorAccent">@color/green_bright</item>
</style>

Và tham khảo nó trong chuyển đổi của bạn:

<android.support.v7.widget.SwitchCompat
  android:theme="@style/ToggleSwitchTheme" ... />

Làm như vậy nó sẽ CHỈ ảnh hưởng đến màu sắc của các khung nhìn bạn muốn áp dụng nó.


Vì một số lý do, tôi cũng phải đặt "colorControlActivated" thành cùng một giá trị, nhưng trên POC, nó đã đủ để sử dụng "colorAccent". Làm thế nào mà?
nhà phát triển Android

22
<androidx.appcompat.widget.SwitchCompat
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:thumbTint="@color/white"
                app:trackTint="@drawable/checker_track"/>

Và bên trong checker_track.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/lightish_blue" android:state_checked="true"/>
    <item android:color="@color/hint" android:state_checked="false"/>
</selector>

thumbTintchỉ áp dụng trên Android API 21 trở lên. Làm thế nào nếu tôi muốn thay đổi màu sắc trên Android 21 bên dưới?
Jacanka Bisano

developer.android.com/reference/android/support/v7/widget/ Đổi SwitchCompat tương thích ngược với API 7 trở lên
wingear

1
Đó là năm 2020. Tôi thực sự tự hỏi nơi nào trên thế giới mọi người vẫn sử dụng Android 21 trở xuống?
zeeshan

18

Tôi đã giải quyết nó bằng cách cập nhật Bộ lọc màu khi trạng thái Switch bị thay đổi ...

public void bind(DetailItem item) {
    switchColor(item.toggle);
    listSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                switchColor(b);
        }
    });
}

private void switchColor(boolean checked) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        listSwitch.getThumbDrawable().setColorFilter(checked ? Color.BLACK : Color.WHITE, PorterDuff.Mode.MULTIPLY);
        listSwitch.getTrackDrawable().setColorFilter(!checked ? Color.BLACK : Color.WHITE, PorterDuff.Mode.MULTIPLY);
    }
}

13

Có thể hơi muộn, nhưng đối với các nút chuyển đổi, nút toogle không phải là câu trả lời, bạn phải thay đổi mức có thể rút ra trong tham số xml của công tắc:

 android:thumb="your drawable here"

9

làm cho "newthumb.xml" có thể vẽ được

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/Green" android:state_checked="true"/>
    <item android:color="@color/Red" android:state_checked="false"/>
</selector>

và tạo "newtrack.xml" có thể vẽ

<selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:color="@color/black" android:state_checked="true"/>
        <item android:color="@color/white" android:state_checked="false"/>
    </selector>

và thêm nó vào Switch:

<Switch
        android:trackTint="@drawable/newtrack"
        android:thumbTint="@drawable/newthumb"
         />

1
Những công việc này. Tuy nhiên, cần lưu ý rằng AndroidStudio sẽ không thể đề xuất các tài nguyên @drawable cho trackTinthoặc thumbTint. Một người cần phải viết nó bằng tay và nó hoạt động.
Benjamin Basmaci

Vì một số lý do, đây là câu trả lời duy nhất hoạt động đáng tin cậy trên Huawei của tôi. Cảm ơn!
Tên người dùng ein

7

Trong Android Lollipop trở lên, hãy xác định nó theo phong cách chủ đề của bạn:

<style name="BaseAppTheme" parent="Material.Theme">
    ...
    <item name="android:colorControlActivated">@color/color_switch</item>
</style>

Vấn đề với giải pháp này là nó cũng thay đổi màu sắc của các văn bản đã chọn mà tôi không muốn.
mã hóa

@codewing Tất nhiên rồi. Bởi vì điều này được đặt trong sở thích phong cách toàn cầu. Để đạt được mục tiêu của bạn, là tìm id chế độ xem của chế độ xem mục tiêu của bạn và sửa đổi các thuộc tính của nó.
emen

OK, đó là cho vị trí "Bật". Còn việc thay đổi màu ngón tay cái cho vị trí "Tắt" thì sao?
TavernSenses

7

Tạo hình ảnh 9 miếng của riêng bạn và đặt nó làm nền của nút chuyển đổi.

http://radleymarx.com/2011/simple-guide-to-9-patch/


2
Vâng, có thể làm điều đó, nhưng chắc chắn PHẢI có một cách dễ dàng hơn? Tuyển chọn có thể?
JamesSugrue

Không, không có cách nào dễ dàng hơn. Bạn không thể thay đổi màu sắc của hình ảnh một cách kỳ diệu :)
you786

Điểm tốt. Tôi đã không hoàn toàn hiểu làm thế nào nó hoạt động cho đến khi tôi có một cái nhìn sâu hơn.
JamesSugrue

@Denizen, bạn có chắc không? Nếu vậy, gửi câu trả lời và tôi sẽ bỏ phiếu.
bạn786

@Denizen Hãy xóa bình luận của bạn. Android Switch luôn trả về null cho getBackground (), tôi đã lãng phí 30 phút để thử điều này.
Shirish Herwade

5

Các giải pháp được đề xuất từ ​​arlomedia làm việc cho tôi. Về vấn đề không gian mở rộng của anh ấy, tôi đã giải quyết việc loại bỏ tất cả các phần đệm cho công tắc.

BIÊN TẬP

Theo yêu cầu, đây là những gì tôi có.

Trong tệp bố cục, công tắc của tôi nằm trong bố cục tuyến tính và sau TextView.

<LinearLayout
        android:id="@+id/myLinearLayout"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center_horizontal|center"
        android:gravity="right"
        android:padding="10dp"
        android:layout_marginTop="0dp"
        android:background="@drawable/bkg_myLinearLayout"
        android:layout_marginBottom="0dp">
        <TextView
            android:id="@+id/myTextForTheSwitch"
            android:layout_height="wrap_content"
            android:text="@string/TextForTheSwitch"
            android:textSize="18sp"
            android:layout_centerHorizontal="true"
            android:layout_gravity="center_horizontal|center"
            android:gravity="right"
            android:layout_width="wrap_content"
            android:paddingRight="20dp"
            android:textColor="@color/text_white" />
        <Switch
            android:id="@+id/mySwitch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textOn="@string/On"
            android:textOff="@string/Off"
            android:layout_centerHorizontal="true"
            android:layout_gravity="center_horizontal"
            android:layout_toRightOf="@id/myTextForTheSwitch"
            android:layout_alignBaseline="@id/myTextForTheSwitch"
            android:gravity="right" />
    </LinearLayout>

Vì tôi đang làm việc với Xamarin / Monodroid (tối thiểu Android 4.1) nên mã của tôi là:

Android.Graphics.Color colorOn = Android.Graphics.Color.Green;
Android.Graphics.Color colorOff = Android.Graphics.Color.Gray;
Android.Graphics.Color colorDisabled = Android.Graphics.Color.Green;

StateListDrawable drawable = new StateListDrawable();
drawable.AddState(new int[] { Android.Resource.Attribute.StateChecked }, new ColorDrawable(colorOn));
drawable.AddState(new int[] { -Android.Resource.Attribute.StateEnabled }, new ColorDrawable(colorDisabled));
drawable.AddState(new int[] { }, new ColorDrawable(colorOff));

swtch_EnableEdit.ThumbDrawable = drawable;

swtch_EnableEdit trước đây được định nghĩa như thế này (Xamarin):

Switch swtch_EnableEdit = view.FindViewById<Switch>(Resource.Id.mySwitch);

Tôi không đặt ở tất cả các phần đệm và tôi không gọi .setPadding (0, 0, 0, 0).


Bạn có thể cung cấp mã cho điều đó? Tôi đã thử switchInput.setPadding (0, 0, 0, 0) nhưng không có gì thay đổi.
arlomedia

1
Đã thử nghiệm trong Xamarin bằng thư viện AppCompat để nhắm mục tiêu 5.x và điều này hoạt động như quảng cáo.
Alex.Ritna

4

bạn có thể tạo kiểu tùy chỉnh cho tiện ích chuyển đổi sử dụng dấu màu làm mặc định khi thực hiện kiểu tùy chỉnh cho nó

<style name="switchStyle" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorPrimary</item>    <!-- set your color -->
</style>    


1

Hãy thử tìm ra câu trả lời đúng tại đây: Công cụ chọn màu nền của TextView . Trong hai từ, bạn nên tạo Shape trong XML bằng màu sắc và sau đó gán nó cho trạng thái "được kiểm tra" trong bộ chọn của bạn.


Giải pháp tốt đẹp, nhưng bạn có biết làm thế nào chúng ta có thể thay đổi màu sắc linh hoạt?
inverted_index

Bạn chỉ cần đặt bộ chọn làm tài nguyên nền
Shamm

1

Tôi không biết làm thế nào để làm điều đó từ java, nhưng nếu bạn có một phong cách được xác định cho ứng dụng của mình, bạn có thể thêm dòng này theo phong cách của bạn và bạn sẽ có màu mong muốn cho tôi, tôi đã sử dụng # 3F51B5

<color name="ascentColor">#3F51B5</color>

1

Cách dễ nhất là xác định sắc độ theo dõi và đặt chế độ màu thành src_over để loại bỏ độ trong suốt 30%.

android:trackTint="@drawable/toggle_style"
android:trackTintMode="src_over"

toggle_style.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/informationDefault"
        android:state_checked="true"
        />
    <item android:color="@color/textDisabled" android:state_checked="false"/>
</selector>

0

Ngoài ra, ngoài các câu trả lời hiện có: bạn có thể tùy chỉnh ngón tay cái và theo dõi bằng cách sử dụng bộ chọn trong res/colorthư mục, ví dụ:

switch_track_selector

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

switch_thumb_selector

<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/darkBlue"
        android:state_checked="true" />
    <item android:color="@color/white"/>
</selector>

Sử dụng các công cụ chọn này để tùy chỉnh các gợi ý theo dõi và ngón tay cái:

<androidx.appcompat.widget.SwitchCompat
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:trackTint="@color/switch_track_selector"
    app:thumbTint="@color/switch_thumb_selector"/>

Hãy nhớ rằng nếu bạn sử dụng standart Switchandroidkhông gian tên cho các thuộc tính này, nó sẽ chỉ hoạt động cho API 23 trở lên, vì vậy hãy sử dụng SwitchCompatvới appkhông gian tênxmlns:app="http://schemas.android.com/apk/res-auto" làm giải pháp phổ quát.

Kết quả:

nhập mô tả hình ảnh ở đây


0

Trong xml, bạn có thể thay đổi màu như:

 <androidx.appcompat.widget.SwitchCompat
    android:id="@+id/notificationSwitch"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:checked="true"
    app:thumbTint="@color/darkBlue"
    app:trackTint="@color/colorGrey"/>

Tự động bạn có thể thay đổi như:

Switch.thumbDrawable.setColorFilter(ContextCompat.getColor(requireActivity(), R.color.darkBlue), PorterDuff.Mode.MULTIPLY)

-1

Giải pháp cho Android Studio 3.6:

yourSwitch.setTextColor(getResources().getColor(R.color.yourColor));

Thay đổi màu văn bản của giá trị được xác định trong tệp XML màu (yourColor).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.