একটি স্যুইচের রঙ "চালু" করুন


156

আমি একটি আইসিএস অ্যাপে holo.light থিম সহ একটি স্ট্যান্ডার্ড সুইচ নিয়ন্ত্রণ ব্যবহার করছি।

আমি স্ট্যান্ডার্ড হালকা নীল থেকে সবুজ থেকে টগল বোতামের হাইলাইটেড বা স্টেট রঙে পরিবর্তন করতে চাই।

এটি সহজ হওয়া উচিত, তবে এটি কীভাবে করা যায় তা আমার মনে হয় না।


প্রাসঙ্গিক প্ল্যাটফর্ম রিসোর্সগুলি (নির্বাচক এবং * .png ফাইল) অনুলিপি করা এবং 'অন' স্থিতিযোগ্য অঙ্কনযোগ্য পরিবর্তন ছাড়া আমি অন্য কোনও উপায় দেখতে পাচ্ছি না। Switchপরে এই কাস্টম নির্বাচকের দিকে নির্দেশ করতে ভুলবেন না ।
এমএইচ।

উত্তর:


100

আপাতত অ্যাপকম্প্যাট.ভি 7 লাইব্রেরি থেকে সুইচকম্প্যাট ব্যবহার করা ভাল। তারপরে আপনি আপনার উপাদানগুলির রঙ পরিবর্তন করতে সাধারণ স্টাইলিং ব্যবহার করতে পারেন।

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: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। যদি SDK 23+ ব্যবহার করে থাকে তবে আপনি android:thumbTintএবং এর android:thumbTintModeসাথে ব্যবহার করতে পারেন ColorStateList
টম

1
@ টম প্লাজ রিপ্লাই দেবে যারা 'অ্যান্ড্রয়েড: থাম্বটিন্ট' জিনিসগুলি ডিভাইসে কাজ করবে <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
@ ম্যাক্সিমকনিয়াজেভ আপনার ব্যবহার করতে হবে SwitchCompat;)
ওভি ত্রিফ

1
কালার কন্ট্রোল অ্যাক্টিভেটেড বাদে ভাল - এটি ট্র্যাকের রঙ সেট করে না, শুধুমাত্র থাম্বের রঙ।
পয়েন্টার নুল

1
: এখানে সুইচ এবং SwitchCompat জন্য সমাধান stackoverflow.com/a/47036089/5869630
roghayeh hosseini

<স্টাইল> ট্যাগগুলি পুনরায় রেজাল্ট >> মান >> স্টাইলস.এক্সএমএল এবং <স্যুইচ ...> এর জন্য এক্সএমএল পৃষ্ঠায় লিখিত হতে হবে আপনার নামটি কেবলমাত্র যুক্ত করা উচিত: অ্যান্ড্রয়েড: থিম = "@ শৈলী / এসসিবিএস এবং আমার রঙগুলি : colorControlAcatedated "> # ff0000 এবং colorSwitchThumbNormal"> # 00ff00 এবং অ্যান্ড্রয়েড: colorForeground "> # 00ff00
বে

টুইটারে এটির মতো সাধারণ তথ্য খুঁজে পাওয়া কতটা কষ্টকর তা চিত্তাকর্ষক। প্রচুর এবং প্রচুর উত্তর আমি পড়ছি, এবং এখন পর্যন্ত কোনও কার্যকারী উত্তর দেয় নি gave অবশেষে!
জাইহম্বার্তো

49

এটি আমার জন্য কাজ করছে (অ্যান্ড্রয়েড ৪.১ প্রয়োজন):

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 পিক্সেলের বলে মনে হয়েছিল। এর জন্য অবশ্যই একটি সমাধান থাকতে হবে, তবে আমি এখনও এটি পাইনি ...

অ্যান্ড্রয়েড 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);

অ্যান্ড্রয়েড 6-7 এর জন্য আপডেট

চেরুবি মন্তব্যগুলিতে যেমন বলেছিলেন, আমরা নতুনটি ব্যবহার করতে পারি setThumbTintListএবং এটি আমার জন্য প্রত্যাশার মতো কাজ করেছিল। আমরা এটি ব্যবহার করতে পারি setTrackTintListতবে এটি মিশ্রণ হিসাবে রঙটি প্রয়োগ করে, এর ফলে গা dark় রঙের থিমগুলিতে প্রত্যাশার চেয়ে গাer় এবং হালকা রঙের থিমগুলিতে প্রত্যাশার চেয়ে হালকা হয়, কখনও কখনও অদৃশ্য হওয়ার দিক থেকে। অ্যান্ড্রয়েড In-এ, আমি ট্র্যাক টিন্ট মোডটি ওভাররাইড করে সেই পরিবর্তনটি হ্রাস করতে সক্ষম হয়েছি , তবে অ্যান্ড্রয়েড in এ এর ​​থেকে আমি কোনও ভাল ফলাফল পেতে পারি না You আপনাকে মিশ্রণের জন্য ক্ষতিপূরণকারী অতিরিক্ত রঙগুলি সংজ্ঞায়িত করতে হতে পারে। (আপনি কি কখনও অনুভূতি পান যে গুগল আমাদের অ্যাপ্লিকেশনগুলির চেহারাটি কাস্টমাইজ করতে চায় না?)

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 পদ্ধতির ব্যবহার করছি - অন্য কথায়, স্যুইচটি কিছু সক্ষম / অক্ষম করে না, তবে দুটি বিকল্পের মধ্যে পছন্দ হিসাবে ব্যবহার করা হয়।
নাটিক্স

4
বুঝেছি যে DrawableCompat.setTintList এটি পূর্ববর্তী ডিভাইসে কাজ করার অনুমতি দেবে। আমি কল করি: DrawableCompat.setTintList (SwitchCompat.getThumbDrawable (), foregroundState);
অ্যালেক্সি

DrawableCompat সমাধান অন্তর্ভুক্ত করতে দয়া করে উত্তরটি সম্পাদনা করুন। এটি পুরোপুরি কাজ করে!
Dmytro করাতিয়েভ

এপিআই 23+: এছাড়াও নওগাতের পক্ষে switchInput.setThumbTintList(buttonStates); কাজ করে। এপিআই 21-22: @ অ্যালেক্সির পরামর্শ অনুযায়ী ড্রয়যোগ্য কমপ্যাট ব্যবহার করুন। switchInput.setButtonTintList(buttonStates);আমার জন্য কাজ করে নি, এটা আমার সুইচ জন্য রাজ্যের রঙ করা হয়নি। 21 এর নীচে এপিআই: switchInput.getThumbDrawable().setColorFilter(someColor, PorterDuff.Mode.SrcIn); এগুলি আমার পক্ষে কাজ করেছে। আমিও জামারিনের সাথেও কাজ করেছি, সুতরাং যদি আপনি জামারিন.ফর্মগুলি ব্যবহার করেন তবে অ্যান্ড্রয়েড রেন্ডারারে সি # তে অনুবাদ করুন।
চেরুবি

37

স্টাইল.এক্সএমএল বা জাভা কোড ব্যবহার না করে স্যুইচ শৈলী পরিবর্তন করতে, আপনি সুইচটিকে 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" />

এটি অ্যানড্রয়েড: থাম্বটিন্ট এবং অ্যান্ড্রয়েড: ট্র্যাকটাইন্ট যা আপনাকে রঙ কাস্টমাইজ করতে দেয় attrib

এটি এই এক্সএমএলের জন্য ভিজ্যুয়াল ফলাফল:

এখানে চিত্র বর্ণনা লিখুন


17
এটি থাম্বের রঙ পরিবর্তন করে, তা চালু বা বন্ধ থাকুক না কেন।
অ্যান্ড্রয়েড বিকাশকারী

1
"অ্যাট্রিবিউট থাম্বটিন্টটি কেবলমাত্র এপিআই স্তরের 21 এবং উচ্চতর ক্ষেত্রে ব্যবহৃত হয়"
নরডিবিডিভি

6
@norbDEV অ্যাপ্লিকেশনটি ব্যবহার করুন: থাম্বটিন্ট এবং অ্যাপ্লিকেশন: অ্যাপলকম্প্যাট.ভি 7 লাইব্রেরি থেকে নীচের এপিআই স্তরের জন্য স্যুইচকম্প্যাট সহ ট্র্যাকটিন্ট।
ডেভিড দারিয়াস

এটি কাজ করে, তবে আপনি থাম্বের জন্য রঙটি পরিবর্তন করতে চান, এটি চালু বা বন্ধ থাকে তার উপর নির্ভর করে?
টাওয়ারসেন্সস

2
আপনি যদি তার পরিবর্তে 21 এর নীচে থাম্বটিন্ট ব্যবহার করতে চান এবং এর সাথে পরিবর্তন করতে পারেনapp:thumbTintandroid:thumbTintswitchSwitchCompat
কবিতা_পি

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

সাবকর্ডের উত্তর সঠিক হলেও অন্য উইজেটগুলিকেও প্রভাবিত না করে কীভাবে "অন" রঙ সেট করবেন সে প্রশ্নের উত্তর আসলেই দেয় না। এটি করতে, একটি ThemeOverlayস্টাইল.এক্সএমএল ব্যবহার করুন :

<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" ব্যবহার করার জন্য যথেষ্ট ছিল। কিভাবে?
অ্যান্ড্রয়েড বিকাশকারী 15

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

এবং চেকার_ট্র্যাক.এক্সএমএল এর ভিতরে:

<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কেবলমাত্র 21 এবং তদূর্ধের অ্যান্ড্রয়েড এপিআইতে প্রয়োগ হয়। আমি কীভাবে নীচে অ্যান্ড্রয়েড 21 এর রঙ পরিবর্তন করতে চাই?
জিওভাঙ্কা বিসানো


1
এটি 2020. আমি সত্যিই আশ্চর্য হয়েছি যে পৃথিবীতে এখনও লোকেরা Android 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

এটি কিছুটা দেরিতে হতে পারে তবে স্যুইচ বোতামগুলির জন্য টগল বোতামটি উত্তর নয়, আপনাকে অবশ্যই সুইচের এক্সএমএল প্যারামিটারে অঙ্কনযোগ্য পরিবর্তন করতে হবে:

 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
এইটা কাজ করে. তবে, এটি লক্ষ করা উচিত যে অ্যান্ড্রয়েড স্টুডিও trackTintবা এর জন্য @ ড্রায়েবল সংস্থানগুলির পরামর্শ দিতে সক্ষম হবে না thumbTint। এটি ম্যানুয়ালি লিখতে হবে এবং এটি কাজ করে।
বেনিয়ামিন বাসমাকি

কোনও কারণে এটি হ'ল একমাত্র উত্তর যা আমার হুয়াওয়ের উপর নির্ভরযোগ্যভাবে কাজ করে। ধন্যবাদ!
ein ব্যবহারকারীর নাম

7

অ্যান্ড্রয়েড ললিপপ এবং উপরের অংশে এটি আপনার থিম শৈলীতে সংজ্ঞায়িত করুন:

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

এই সমাধানটির সাথে সমস্যাটি হ'ল এটি আমার নির্বাচিত পাঠ্যগুলির রং পরিবর্তন করে যা আমি চাই না।
কোডউইং

@ কোডিং অবশ্যই তা করবে। কারণ এটি বিশ্বব্যাপী স্টাইলের পছন্দগুলিতে সেট করা আছে। আপনার লক্ষ্য অর্জনের জন্য, আপনার লক্ষ্য দর্শনের ভিউ আইডিটি অনুসন্ধান করা এবং এর বৈশিষ্ট্যগুলিকে সংশোধন করা।
ইমান

ঠিক আছে, এটি "অন" অবস্থানের জন্য। "অফ" অবস্থানের জন্য থাম্বের রঙ পরিবর্তন করার বিষয়ে কী?
ট্যাভারসেন্সস

7

আপনার নিজস্ব 9-প্যাচ চিত্র তৈরি করুন এবং এটিকে টগল বোতামের পটভূমি হিসাবে সেট করুন।

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


2
হ্যাঁ, এটি করতে পারে, তবে অবশ্যই এখানে একটি সহজ উপায় থাকতে হবে? নির্বাচকরা হয়তো?
জেমসসগ্রু

না, এর চেয়ে সহজ উপায় আর নেই। আপনি
যাদুতে

ভাল যুক্তি. আমি আরও গভীর চেহারা না পাওয়া পর্যন্ত এটি কীভাবে কাজ করে তা আমি পুরোপুরি পাইনি।
জেমসসগ্রু

@ ডেনিজেন, আপনি কি নিশ্চিত? যদি তা হয় তবে একটি উত্তর পোস্ট করুন এবং আমি এটিকে ভোট দিয়ে দেব।
you786

@ ডেনিজেন দয়া করে আপনার মন্তব্য সরান। অ্যান্ড্রয়েড স্যুইচ সর্বদা getBackground () এর জন্য নালায় ফিরে আসে, আমি এটি চেষ্টা করে 30 মিনিট নষ্ট করি।
শিরীশ হারওয়াড

5

অ্যালোমেডিয়া থেকে প্রস্তাবিত সমাধানটি আমার পক্ষে কাজ করেছিল। তাঁর এক্সট্রা স্পেসের সমস্যা সম্পর্কে আমি স্যুইডে সমস্ত প্যাডিংস সরিয়ে সমাধান করেছি।

সম্পাদনা

অনুরোধ হিসাবে, এখানে আমার কি আছে।

লেআউট ফাইলে, আমার স্যুইচটি একটি রৈখিক বিন্যাসের ভিতরে এবং একটি টেক্সটভিউয়ের পরে।

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

যেহেতু আমি জামারিন / মনোড্রয়েড (সর্বনিম্ন অ্যান্ড্রয়েড 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 এর আগে এইরূপে সংজ্ঞায়িত করা হয়েছিল (জ্যামারিন):

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

আমি সমস্ত প্যাডিংস সেট করি না এবং আমি। সেটপ্যাডিং (0, 0, 0, 0) কল করি না।


আপনি কি তার জন্য কোড সরবরাহ করতে পারেন? আমি সুইচইনপুট.সেটপ্যাডিং (0, 0, 0, 0) চেষ্টা করেছিলাম তবে কিছুই পরিবর্তন হয়নি।
আরলোমেডিয়া

1
X.x লক্ষ্য হিসাবে অ্যাপকম্প্যাট লাইব্রেরিটি ব্যবহার করে জামারিনে পরীক্ষিত এবং এটি বিজ্ঞাপন হিসাবে কাজ করে worked
অ্যালেক্স.রিতনা

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

এখানে সঠিক উত্তরটি খোঁজার চেষ্টা করুন: টেক্সটভিউয়ের পটভূমির রঙের নির্বাচক । দুটি কথায় আপনার রঙের সাথে এক্সএমএলে শেপ তৈরি করা উচিত এবং তারপরে এটি আপনার নির্বাচককে "পরীক্ষিত" অবস্থায় নির্ধারণ করুন।


দুর্দান্ত সমাধান, তবে আপনি কী জানেন কীভাবে আমরা রঙকে পরিবর্তনশীল করতে পারি?
inverted_index

আপনাকে কেবল নির্বাচকটিকে ব্যাকগ্রাউন্ড রিসোর্স হিসাবে সেট করতে হবে
শামীম

1

জাভা থেকে এটি কীভাবে করবেন তা আমি জানিনা, তবে আপনার অ্যাপের জন্য কোনও স্টাইল সংজ্ঞায়িত করা থাকলে আপনি এই স্টাইলটিতে এই লাইনটি যুক্ত করতে পারেন এবং আপনার জন্য আমার পছন্দসই রঙ থাকতে হবে আমি # 3F51B5 ব্যবহার করেছি

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

1

সবচেয়ে সহজ উপায় হ'ল ট্র্যাক রঞ্জক সংজ্ঞা দেওয়া, এবং 30% স্বচ্ছতা অপসারণ করতে trc মোডটি 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"/>

মনে রাখবেন যে আপনি যদি এই বৈশিষ্ট্যগুলির জন্য স্ট্যান্ডার্ট Switchএবং androidনেমস্পেস ব্যবহার করেন তবে এটি কেবল এপিআই 23 এবং তারপরে কাজ করবে, তাই সর্বজনীন সমাধান হিসাবে নেমস্পেসের SwitchCompatসাথে ব্যবহার করুন ।appxmlns:app="http://schemas.android.com/apk/res-auto"

ফলাফল:

এখানে চিত্র বর্ণনা লিখুন


0

এক্সএমএলে, আপনি রঙটি এই হিসাবে পরিবর্তন করতে পারেন:

 <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

অ্যান্ড্রয়েড স্টুডিও 3.6 এর সমাধান:

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

রঙের এক্সএমএল ফাইলের সংজ্ঞায়িত মান (আপনার রঙ) এর পাঠ্যের রঙ পরিবর্তন করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.