एक स्विच का "चालू" रंग बदलें


156

मैं एक आईसीएस ऐप में holo.light विषय के साथ एक मानक स्विच नियंत्रण का उपयोग कर रहा हूं।

मैं टॉगल बटन के हाइलाइटेड या स्टेट कलर को स्टैंडर्ड लाइट ब्लू से ग्रीन में बदलना चाहता हूं।

यह आसान होना चाहिए, लेकिन मैं यह नहीं कर सकता कि यह कैसे करना है।


मुझे वास्तव में संबंधित प्लेटफ़ॉर्म संसाधनों (चयनकर्ता और * .Png फ़ाइलों) की प्रतिलिपि बनाने के अलावा कोई अन्य तरीका नहीं दिखता है और 'ड्रा' योग्य को संशोधित करता है। Switchइस कस्टम चयनकर्ता को बाद में इंगित करना न भूलें ।
एमएच।

जवाबों:


100

अब के रूप में यह AppCompat.v7 पुस्तकालय से SwitchCompat का उपयोग करने के लिए बेहतर है। फिर आप अपने घटकों के रंग को बदलने के लिए साधारण स्टाइलिंग का उपयोग कर सकते हैं।

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>

रेफरी: Android डेवलपर्स ब्लॉग

संपादित करें :

जिस तरीके से इसे सही तरीके से लागू किया जाना चाहिए वह माध्यम है android:theme="@style/Theme.MyTheme" और यह माता-पिता की शैलियों जैसे एडिटेक्स, रेडियोबटन, स्विच, चेकबॉक्स और प्रोग्रेसबर्स पर भी लागू किया जा सकता है:

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

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

1
हालांकि उस समय लागू नहीं है, यह स्वीकृत उत्तर होना चाहिए!
एंड्रयू गैलास्च

इसे स्वीकार किए गए उत्तर में बदल दिया है, क्योंकि यह इस प्रश्न के लिए "आधुनिक" दृष्टिकोण है।
जेम्ससुग्रे

1
मैंने इन सभी की कोशिश की और उनमें से किसी ने भी मेरे स्विच के लिए "ऑन" राज्य का रंग नहीं बदला।
एडम जॉन्स

31
'ऑन' है colorAccent, 'ऑफ' है colorSwitchThumbNormal। यदि AppCompatथीम का उपयोग कर रहे हैं , तो आपको SwitchCompatइसके बजाय उपयोग करने की आवश्यकता है Switch। यदि एसडीके 23+ का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं android:thumbTintऔर android:thumbTintModeए के साथ ColorStateList
टॉम

1
@ टॉम प्लाज़ रिप्लाई करेंगे वो 'android: thumbTint' डिवाइस पर काम करेंगे <23
शिरीष हेरवाडे

269

पार्टी करने के लिए देर हो रही है लेकिन मैंने ऐसा किया है

अंदाज

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

रंग की

यहाँ छवि विवरण दर्ज करें

ख़ाका

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

परिणाम

सक्षम और अक्षम स्विच के लिए रंगों का परिवर्तन देखें

यहाँ छवि विवरण दर्ज करें


14
@MaksimKniazev आपको उपयोग करना होगा SwitchCompat;)
ओवी

1
ColorControlActivated को छोड़कर अच्छा है, यह केवल अंगूठे के रंग को ट्रैक नहीं करता है।
सूचक नल

1
यहाँ स्विच और स्विचकम्पैट के लिए समाधान है: stackoverflow.com/a/47036089/5869630
roghayeh hosseini

<style> टैग्स को Res के अंतर्गत लिखे जाने की जरूरत है> मान >> style.xml और XML पेज पर <स्विच ...> आपको केवल एक पंक्ति जोड़ना चाहिए: जिसे android: theme = "@ style / SCBSwitch और मेरे रंग हैं : colorControlActivated "> # ff0000 और colorSwitchThumbNormal"> # 00ff00 और Android: colorForeground "> # 00ff00
Bay

@OviTrif बहुत बढ़िया! यह प्रभावशाली है कि इस तरह एक साधारण जानकारी प्राप्त करना कितना कठिन है। बहुत सारे और बहुत सारे उत्तर मैं पढ़ रहा हूं, और किसी ने भी, अब तक एक काम का जवाब नहीं दिया। आखिरकार!
जयरहंबरो

49

यह मेरे लिए काम कर रहा है (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);

ध्यान दें कि "डिफ़ॉल्ट" स्थिति को अंतिम रूप में जोड़ा जाना चाहिए जैसा कि यहां दिखाया गया है।

एकमात्र समस्या जो मुझे दिखाई देती है वह यह है कि स्विच का "अंगूठा" अब पृष्ठभूमि से बड़ा या स्विच का "ट्रैक" प्रतीत होता है। मुझे लगता है कि क्योंकि मैं अभी भी डिफ़ॉल्ट ट्रैक छवि का उपयोग कर रहा हूं, जिसके चारों ओर कुछ खाली जगह है। हालाँकि, जब मैंने इस तकनीक का उपयोग करके ट्रैक इमेज को कस्टमाइज़ करने का प्रयास किया, तो मेरे स्विच में 1 / पिक्सेल की ऊँचाई दिखाई दी, जिसमें टेक्स्ट के दिखने / बंद होने का सिर्फ एक स्लिवर था। उस के लिए एक समाधान होना चाहिए, लेकिन मैं इसे अभी तक नहीं मिला है ...

Android 5 के लिए अपडेट करें

एंड्रॉइड 5 में, ऊपर का कोड स्विच को पूरी तरह से गायब कर देता है। हमें नए का उपयोग करने में सक्षम होना चाहिए सेटबटनटाइटलिस्ट पद्धति , लेकिन स्विच के लिए इसे नजरअंदाज किया जाना चाहिए। लेकिन यह काम करता है:

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

Android 6-7 के लिए अपडेट करें

जैसा कि चेरुबी ने टिप्पणियों में कहा था, हम नए का उपयोग कर सकते हैं setThumbTintListऔर जो मेरे लिए उम्मीद के मुताबिक काम किया है। हम उपयोग भी कर सकते हैं setTrackTintList, लेकिन यह रंग को एक मिश्रण के रूप में लागू करता है, जिसके परिणामस्वरूप गहरे रंग के विषयों में अपेक्षा से अधिक गहरा और हल्के रंग के विषयों में अपेक्षा से हल्का होता है, कभी-कभी अदृश्य होने के बिंदु पर। एंड्रॉइड 7 में, मैं ट्रैक टिंट मोड को ओवरराइड करके उस परिवर्तन को कम करने में सक्षम था , लेकिन मुझे एंड्रॉइड 6 में उस से अच्छे परिणाम नहीं मिल सके। आपको अतिरिक्त रंगों को परिभाषित करने की आवश्यकता हो सकती है जो सम्मिश्रण के लिए क्षतिपूर्ति करते हैं। (क्या आपको कभी यह एहसास होता है कि Google नहीं चाहता है कि हम अपने ऐप्स की उपस्थिति को कस्टमाइज़ करें?)

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);
}

मैं एक स्विच बनाने के लिए getThumbDrawable / getTrackDrawable दृष्टिकोण का उपयोग कर रहा हूं जहां दोनों राज्यों का रंग समान है - दूसरे शब्दों में, स्विच कुछ सक्षम / अक्षम नहीं करता है, लेकिन दो विकल्पों के बीच एक विकल्प के लिए उपयोग किया जाता है।
22

4
समझे कि DrawableCompat.setTintList इसे पिछले उपकरणों पर काम करने की अनुमति देगा। मैं कहता हूं: DrawableCompat.setTintList (switchCompat.getThumbDrawable (), फोरग्राउंडस्ट्रीम);
एलेक्सी

कृपया DrawableCompat समाधान को शामिल करने के लिए उत्तर संपादित करें। यह पूरी तरह से काम करता है!
दिमित्रो कराटाएव

एपीआई 23+: नूगाट के switchInput.setThumbTintList(buttonStates); लिए भी काम करता है। API 21-22: @Alexey द्वारा सुझाए गए ड्राएबल.कॉम का उपयोग करें। switchInput.setButtonTintList(buttonStates);मेरे लिए काम नहीं किया है, यह मेरी स्विच के लिए राज्यों को रंग नहीं किया। 21 से नीचे का एपीआई: switchInput.getThumbDrawable().setColorFilter(someColor, PorterDuff.Mode.SrcIn); ये मेरे लिए काम करते हैं। मैंने Xamarin के साथ भी काम किया है, इसलिए यदि आप Xamarin.Forms का उपयोग करते हैं, तो एंड्रॉइड रेंडरर्स में C # में अनुवाद करें।
चेरूबी

37

Style.xml या Java कोड का उपयोग किए बिना स्विच शैली को बदलने के लिए, आप लेआउट 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" />

यह विशेषता है android: thumbTint और android: trackTint जिसने आपको रंग अनुकूलित करने की अनुमति दी है

यह इस XML के लिए दृश्य परिणाम है:

यहाँ छवि विवरण दर्ज करें


17
इससे अंगूठे का रंग बदल जाता है, भले ही वह चालू या बंद हो।
Android डेवलपर

1
"एट्रिब्यूट थंब थिंट केवल एपीआई स्तर 21 और उच्चतर में उपयोग किया जाता है"
नॉटबीडीवी

6
@norbDEV ऐप का उपयोग करें: thumbTint और ऐप: निम्न API स्तर के लिए AppCompat.v7 लाइब्रेरी से SwitchCompat के साथ ट्रैक करें।
डेविड दरियास

यह काम करता है, लेकिन क्या होगा यदि आप अंगूठे पर रंग बदलना चाहते हैं, यह निर्भर करता है कि यह चालू है या बंद है?
मधुशाला 13

2
अगर आप 21 से नीचे के अंगूठे का उपयोग करना चाहते हैं, तो app:thumbTintइसके बजाय उपयोग करें android:thumbTintऔर switchसाथ बदलेंSwitchCompat
कविता_

33

रंग बदलने के लिए एक कस्टम स्विच बनाएं और ओवरराइड सेट करें:

  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
पहली पोस्ट जिसने वास्तव में मुझे स्टाइल या थीम का उपयोग किए बिना सामग्री स्विच के लिए कस्टम रंग हासिल करने में मदद की। धन्यवाद !
मैकॉविच

1
अच्छा लगा। मेरे पास पहले से ही अपना स्वनिर्धारित स्विच था, इसलिए मुझे केवल निर्धारित पद्धति को ओवरराइड करना पड़ा है और उन सभी ने अपने रंग बदल दिए हैं। स्पेन से साभार
जूलियो

22

जबकि SubChord द्वारा उत्तर सही है, क्या वास्तव में इस सवाल का जवाब नहीं दिया गया है कि "" ऑन "रंग को कैसे सेट किया जाए, अन्य विगेट्स को भी प्रभावित किए बिना। ऐसा करने के लिए, ThemeOverlaystyle.xml में एक का उपयोग करें :

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

और इसे अपने स्विच में देखें:

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

ऐसा करने में यह केवल उन विचारों के रंग को प्रभावित करेगा जिन्हें आप इसे लागू करना चाहते हैं।


किसी कारण से, मुझे "colorControlActivated" को भी उसी मूल्य पर सेट करना पड़ा, फिर भी POC पर, "colorAccent" का उपयोग करने के लिए पर्याप्त था। कैसे?
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"/>

और अंदर 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>

thumbTintकेवल Android API 21 और इसके बाद के संस्करण पर लागू होता है। अगर मैं एंड्रॉइड 21 के नीचे का रंग बदलना चाहता हूं तो कैसे करूं?
गियोवान्का बिसानो

developer.android.com/reference/android/support/v7/widget/... SwitchCompat पूर्ववत एपीआई 7 के साथ और ऊपर
wingear

1
यह 2020 है। मुझे वास्तव में आश्चर्य है कि दुनिया में लोग अभी भी एंड्रॉइड 21 और नीचे का उपयोग कैसे कर रहे हैं?
जीशान

18

जब स्विच स्थिति बदली गई थी, तो मैंने कलर फिल्टर को अपडेट करके इसे हल किया ...

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

इसकी थोड़ी देर हो सकती है, लेकिन स्विच बटन के लिए, टॉगल बटन का जवाब नहीं है, आपको स्विच के xml पैरामीटर में drawable को बदलना होगा:

 android:thumb="your drawable here"

9

बनाने योग्य "newthumb.xml"

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

और बनाने योग्य "newtrack.xml"

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

और इसे स्विच में जोड़ें:

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

1
यह काम। हालांकि, यह ध्यान दिया जाना चाहिए कि AndroidStudio के लिए @drawable संसाधनों का सुझाव देने में सक्षम नहीं होगा trackTintया thumbTint। इसे मैन्युअल रूप से लिखने की आवश्यकता है और यह काम करता है।
बेंजामिन बासमासी

किसी कारण से यह एकमात्र उत्तर है जो मेरे Huawei पर मज़बूती से काम करता है। धन्यवाद!
einUsername

7

Android लॉलीपॉप और इसके बाद के संस्करण में, इसे अपनी थीम शैली में परिभाषित करें:

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

इस समाधान के साथ समस्या यह है कि यह मेरे चुने हुए टेक्स्टडिट्स के रंगों को भी बदलता है जो कि मैं नहीं चाहता।
कोडिंग

@ कोडिंग जरूर होगी। क्योंकि यह वैश्विक शैली वरीयता में निर्धारित है। अपने लक्ष्य को प्राप्त करने के लिए, अपने लक्ष्य दृश्य की आईडी देखने और उसकी विशेषताओं को संशोधित करना है।
emen

ठीक है, यह "चालू" स्थिति के लिए है। "ऑफ" स्थिति के लिए अंगूठे का रंग बदलने के बारे में क्या?
TavernSenses

7

अपनी खुद की 9-पैच छवि बनाएं और इसे टॉगल बटन की पृष्ठभूमि के रूप में सेट करें।

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


2
हाँ, ऐसा कर सकते हैं, लेकिन निश्चित रूप से वहाँ एक आसान तरीका होना चाहिए? चयनकर्ता शायद?
जेम्ससुगर

नहीं, कोई आसान तरीका नहीं है। आप जादुई रूप से एक छवि का रंग नहीं बदल सकते :)
you786

अच्छी बात। मैं पूरी तरह से नहीं मिला कि यह कैसे काम करता है जब तक कि मैं एक गहरा रूप नहीं था।
जेम्ससुगर

@Denizen, क्या आपको यकीन है? यदि हां, तो एक उत्तर पोस्ट करें और मैं इसे वोट करूंगा।
you786

@Denizen कृपया अपनी टिप्पणी हटा दें। Android स्विच हमेशा getBackground () के लिए शून्य देता है, मैंने यह कोशिश करते हुए 30 मिनट बर्बाद कर दिए।
शिरीष हेरवाडे

5

अर्लोमेडिया से सुझाए गए समाधान ने मेरे लिए काम किया। एक्स्ट्रास्पेस के अपने मुद्दे के बारे में मैंने हल करने के लिए सभी पैडिंग को हटा दिया।

संपादित करें

जैसा कि अनुरोध किया गया है, यहाँ मेरे पास क्या है।

लेआउट फ़ाइल में, मेरा स्विच एक रेखीय लेआउट के अंदर है और एक 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>

चूंकि मैं Xamarin / Monodroid (min। Android 4.1) के साथ काम कर रहा हूं, मेरा कोड है:

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 को पहले इस तरह परिभाषित किया गया है (Xamarin):

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

मैं सभी पैडिंग में सेट नहीं हूं और मैं .setPadding (0, 0, 0, 0) को कॉल नहीं करता हूं।


क्या आप उसके लिए कोड प्रदान कर सकते हैं? मैंने switchInput.setPadding (0, 0, 0, 0) की कोशिश की, लेकिन कुछ भी नहीं बदला।
अर्लोमेडिया

1
5.x को लक्षित करने के लिए AppCompat लाइब्रेरी का उपयोग करके Xamarin में परीक्षण किया गया और इसने विज्ञापन के रूप में काम किया।
एलेक्स.रिटना

4

आप स्विच विजेट के लिए कस्टम शैली बना सकते हैं जो रंग उच्चारण का उपयोग डिफ़ॉल्ट रूप से करते हैं जब इसके लिए कस्टम शैली करते हैं

<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

यहां सही उत्तर जानने का प्रयास करें: TextView की पृष्ठभूमि रंग पर चयनकर्ता । दो शब्दों में आपको रंग के साथ XML में आकार बनाना चाहिए और फिर इसे अपने चयनकर्ता को "चेक" करने के लिए निर्दिष्ट करना चाहिए।


अच्छा समाधान, लेकिन क्या आप जानते हैं कि हम गतिशील रूप से रंग कैसे बदल सकते हैं?
inverted_index

आपको बस चयनकर्ता को पृष्ठभूमि संसाधन के रूप में सेट करने की आवश्यकता है
Shamm

1

मुझे नहीं पता कि यह जावा से कैसे किया जाता है, लेकिन अगर आपके पास आपके ऐप के लिए एक शैली परिभाषित है, तो आप इस लाइन को अपनी शैली में जोड़ सकते हैं और मेरे लिए आपके पास वांछित रंग होगा # 3F51B5

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

1

सबसे आसान तरीका ट्रैक टिंट को परिभाषित करना है, और 30% पारदर्शिता को हटाने के लिए src_over को टिंट मोड सेट करना है।

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

मौजूदा उत्तरों के अतिरिक्त: आप अंगूठे का चयन कर सकते हैं और चयनकर्ताओं का उपयोग करके ट्रैक कर सकते हैं res/color फ़ोल्डर , उदाहरण के लिए:

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>

ट्रैक और अंगूठे के निशान को अनुकूलित करने के लिए इन चयनकर्ताओं का उपयोग करें:

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

ध्यान रखें कि यदि आप इन विशेषताओं के लिए standart Switchऔर androidनाम स्थान का उपयोग करते हैं , तो यह केवल एपीआई 23 और बाद के लिए काम करेगा, इसलिए नाम स्थान के SwitchCompatसाथ उपयोग करेंappxmlns:app="http://schemas.android.com/apk/res-auto" सार्वभौमिक समाधान के रूप में ।

परिणाम:

यहाँ छवि विवरण दर्ज करें


0

Xml में, आप निम्नानुसार रंग बदल सकते हैं:

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

गतिशील रूप से आप इसे बदल सकते हैं:

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

-1

Android Studio 3.6 के लिए समाधान:

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

रंग XML फ़ाइल परिभाषित मूल्य (yourColor) में पाठ का रंग बदलता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.