এটি আমার জন্য কাজ করছে (অ্যান্ড্রয়েড ৪.১ প্রয়োজন):
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);
}
Switch
পরে এই কাস্টম নির্বাচকের দিকে নির্দেশ করতে ভুলবেন না ।