
ডার্ক থিম অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) এবং এর পরবর্তী সংস্করণগুলোতে পাওয়া যায়। এর নিম্নলিখিত সুবিধাগুলো রয়েছে:
- ডিভাইসের স্ক্রিন প্রযুক্তির ওপর নির্ভর করে বিদ্যুৎ ব্যবহার উল্লেখযোগ্য পরিমাণে কমিয়ে দেয়।
- স্বল্প দৃষ্টিসম্পন্ন এবং উজ্জ্বল আলোতে সংবেদনশীল ব্যবহারকারীদের জন্য দৃশ্যমানতা উন্নত করে।
- কম আলোতে ডিভাইস ব্যবহার করা সহজ করে তোলে।
ডার্ক থিম অ্যান্ড্রয়েড সিস্টেম ইউআই এবং ডিভাইসে চলমান অ্যাপগুলোতে প্রয়োগ হয়।
অ্যান্ড্রয়েড ১০ এবং এর পরবর্তী সংস্করণগুলোতে ডার্ক থিম চালু করার তিনটি উপায় রয়েছে:
- সিস্টেম সেটিং ব্যবহার করে সেটিংস > ডিসপ্লে > থিম- এ গিয়ে ডার্ক থিম চালু করুন।
- সক্ষম করা থাকলে, নোটিফিকেশন ট্রে থেকে থিম পরিবর্তন করতে কুইক সেটিংস টাইলটি ব্যবহার করুন।
- পিক্সেল ডিভাইসগুলিতে, একই সাথে ডার্ক থিম চালু করতে ব্যাটারি সেভার মোড চালু করুন। অন্যান্য ডিভাইসে এই সুবিধাটি নাও থাকতে পারে।
WebView কম্পোনেন্ট ব্যবহার করে ওয়েব-ভিত্তিক কন্টেন্টে ডার্ক থিম প্রয়োগ করার নির্দেশাবলীর জন্য, WebView-তে ওয়েব কন্টেন্ট ডার্কেন করুন দেখুন।
আপনার অ্যাপে ডার্ক থিম সমর্থন করুন
ডার্ক থিম সমর্থন করার জন্য, আপনার অ্যাপের থিম—যা সাধারণত res/values/styles.xml ফাইলে পাওয়া যায়—একটি DayNight থিম থেকে ইনহেরিট করার জন্য সেট করুন:
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
আপনি ম্যাটেরিয়াল কম্পোনেন্টস ডার্ক থিমটিও ব্যবহার করতে পারেন:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
এটি অ্যাপের মূল থিমকে সিস্টেম-নিয়ন্ত্রিত নাইট মোড ফ্ল্যাগগুলোর সাথে সংযুক্ত করে এবং চালু করা হলে অ্যাপটিকে একটি ডিফল্ট ডার্ক থিম প্রদান করে।
থিম এবং শৈলী
লাইট থিমের জন্য তৈরি হার্ডকোডেড রং বা আইকন ব্যবহার করা থেকে বিরত থাকুন। এর পরিবর্তে থিম অ্যাট্রিবিউট বা নাইট-কোয়ালিফায়েড রিসোর্স ব্যবহার করুন।
ডার্ক থিমের জন্য দুটি থিম অ্যাট্রিবিউট সবচেয়ে গুরুত্বপূর্ণ:
-
?android:attr/textColorPrimary: একটি সাধারণ টেক্সট কালার। এটি লাইট থিমে প্রায়-কালো এবং ডার্ক থিমে প্রায়-সাদা হয়। এটির একটি নিষ্ক্রিয় অবস্থা রয়েছে। -
?attr/colorControlNormal: আইকনের একটি সাধারণ রঙ। এটির একটি নিষ্ক্রিয় অবস্থা রয়েছে।
আমরা ম্যাটেরিয়াল ডিজাইন কম্পোনেন্ট ব্যবহার করার পরামর্শ দিই, কারণ এর কালার থিমিং সিস্টেম , যেমন ?attr/colorSurface এবং ?attr/colorOnSurface অ্যাট্রিবিউটগুলো, উপযুক্ত রঙ সহজে পাওয়ার সুযোগ করে দেয়। আপনি আপনার থিমে এই অ্যাট্রিবিউটগুলো কাস্টমাইজ করতে পারেন।
অ্যাপের মধ্যে থিম পরিবর্তন করুন
অ্যাপটি চালু থাকা অবস্থায় আপনি ব্যবহারকারীদের এর থিম পরিবর্তন করার সুযোগ দিতে পারেন। নিম্নলিখিত বিকল্পগুলো সুপারিশ করা হলো:
- আলো
- অন্ধকার
- সিস্টেমের ডিফল্ট (প্রস্তাবিত ডিফল্ট বিকল্প)
এই বিকল্পগুলি সরাসরি AppCompat.DayNight মোডগুলির সাথে সম্পর্কিত:
আলো:
MODE_NIGHT_NO।অন্ধকার:
MODE_NIGHT_YES.সিস্টেমের ডিফল্ট:
MODE_NIGHT_FOLLOW_SYSTEM.
থিম পরিবর্তন করতে, নিম্নলিখিতগুলি করুন:
এপিআই লেভেল ৩১ এবং তার উপরে, আপনার অ্যাপটি কোন থিমে চলছে তা সিস্টেমকে জানাতে
UiModeManager#setApplicationNightModeব্যবহার করুন। এর ফলে স্প্ল্যাশ স্ক্রিনের সময় সিস্টেম থিমটি মিলিয়ে নিতে পারে।এপিআই লেভেল ৩০ এবং তার নিচের ভার্সনগুলোতে থিম পরিবর্তন করতে
AppCompatDelegate.setDefaultNightMode()ব্যবহার করুন।
ফোর্স ডার্ক
অ্যান্ড্রয়েড ১০-এ ‘ফোর্স ডার্ক’ নামক একটি ফিচার রয়েছে, যার মাধ্যমে ডেভেলপাররা আলাদাভাবে DayNight থিম সেট না করেই দ্রুত একটি ডার্ক থিম প্রয়োগ করতে পারেন।
ফোর্স ডার্ক আপনার লাইট-থিমযুক্ত অ্যাপের প্রতিটি ভিউ বিশ্লেষণ করে এবং স্ক্রিনে প্রদর্শিত হওয়ার আগেই স্বয়ংক্রিয়ভাবে একটি ডার্ক থিম প্রয়োগ করে। ডার্ক থিম বাস্তবায়নের জন্য প্রয়োজনীয় সময় কমাতে আপনি ফোর্স ডার্ক এবং নেটিভ ইমপ্লিমেন্টেশনের মিশ্রণ ব্যবহার করতে পারেন।
অ্যাপগুলিকে অবশ্যই অ্যাক্টিভিটির থিমে android:forceDarkAllowed="true" সেট করে ফোর্স ডার্ক (Force Dark) চালু করতে হবে। এই অ্যাট্রিবিউটটি সিস্টেম- এবং AndroidX-প্রদত্ত সমস্ত লাইট থিমে সেট করা থাকে, যেমন Theme.Material.Light । যখন আপনি ফোর্স ডার্ক ব্যবহার করবেন, তখন আপনার অ্যাপটি পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন এবং প্রয়োজন অনুযায়ী ভিউ বাদ দিন।
যদি আপনার অ্যাপ Theme.Material এর মতো কোনো ডার্ক থিম ব্যবহার করে, তাহলে Force Dark প্রয়োগ করা হয় না। একইভাবে, যদি আপনার অ্যাপের থিম কোনো DayNight থিম থেকে ইনহেরিট করে, তাহলে স্বয়ংক্রিয় থিম স্যুইচিংয়ের কারণে Force Dark প্রয়োগ করা হয় না।
একটি ভিউতে ফোর্স ডার্ক নিষ্ক্রিয় করুন
android:forceDarkAllowed লেআউট অ্যাট্রিবিউট অথবা setForceDarkAllowed() ব্যবহার করে নির্দিষ্ট ভিউতে ফোর্স ডার্ক নিয়ন্ত্রণ করা যায়।
ওয়েব কন্টেন্ট
ওয়েব-ভিত্তিক কন্টেন্টে ডার্ক থিম ব্যবহারের তথ্যের জন্য, “WebView-তে ওয়েব কন্টেন্ট ডার্কেন করুন ” দেখুন। WebView-তে ডার্ক থিম প্রয়োগের একটি উদাহরণের জন্য, GitHub-এ WebView ডেমোটি দেখুন।
সর্বোত্তম অনুশীলন
নিম্নলিখিত বিভাগগুলিতে ডার্ক থিম বাস্তবায়নের সেরা পদ্ধতিগুলি প্রদান করা হয়েছে।
বিজ্ঞপ্তি এবং উইজেট
ডিভাইসে প্রদর্শিত কিন্তু সরাসরি নিয়ন্ত্রণ করেন না এমন UI সারফেসগুলোর ক্ষেত্রে, নিশ্চিত করুন যে আপনার ব্যবহৃত ভিউগুলো হোস্ট অ্যাপের থিমকে প্রতিফলিত করে। এর দুটি উদাহরণ হলো নোটিফিকেশন এবং লঞ্চার উইজেট।
বিজ্ঞপ্তি
সিস্টেম-প্রদত্ত নোটিফিকেশন টেমপ্লেট, যেমন MessagingStyle , ব্যবহার করুন। এর মানে হলো, সঠিক ভিউ স্টাইলিং প্রয়োগ করার দায়িত্ব সিস্টেমের।
উইজেট এবং কাস্টম নোটিফিকেশন ভিউ
লঞ্চার উইজেটের ক্ষেত্রে, অথবা আপনার অ্যাপ যদি কাস্টম নোটিফিকেশন কন্টেন্ট ভিউ ব্যবহার করে, তাহলে লাইট এবং ডার্ক উভয় থিমেই কন্টেন্টটি পরীক্ষা করে দেখুন।
যেসব সাধারণ ভুলের দিকে খেয়াল রাখতে হবে, সেগুলো নিচে উল্লেখ করা হলো:
- ধরে নেওয়া হচ্ছে পটভূমির রঙ সর্বদা হালকা।
- টেক্সটের রঙ হার্ডকোড করা।
- ডিফল্ট টেক্সট কালার ব্যবহার করার সময় একটি হার্ডকোডেড ব্যাকগ্রাউন্ড কালার সেট করা।
- একটি স্থির রঙের ড্রয়েবল আইকন ব্যবহার করা।
এই সব ক্ষেত্রে, হার্ডকোডেড রঙের পরিবর্তে উপযুক্ত থিম অ্যাট্রিবিউট ব্যবহার করুন।
লঞ্চ স্ক্রিন
আপনার অ্যাপের যদি একটি কাস্টম লঞ্চ স্ক্রিন থাকে, তবে নির্বাচিত থিমের সাথে সামঞ্জস্য রাখতে আপনাকে সেটি পরিবর্তন করতে হতে পারে।
প্রোগ্রাম্যাটিকভাবে সাদা সেট করা ব্যাকগ্রাউন্ড কালারের মতো যেকোনো হার্ডকোডেড কালার সরিয়ে ফেলুন। এর পরিবর্তে ?android:attr/colorBackground থিম অ্যাট্রিবিউটটি ব্যবহার করুন।
কনফিগারেশন পরিবর্তন
যখন সিস্টেম সেটিং বা AppCompat-এর মাধ্যমে অ্যাপের থিম পরিবর্তিত হয়, তখন uiMode কনফিগারেশনেও পরিবর্তন আসে। এর ফলে অ্যাক্টিভিটিগুলো স্বয়ংক্রিয়ভাবে পুনরায় তৈরি হয়।
কিছু ক্ষেত্রে, আপনি চাইতে পারেন যে কোনো একটি অ্যাপ কনফিগারেশন পরিবর্তনটি পরিচালনা করুক। উদাহরণস্বরূপ, একটি ভিডিও চলার কারণে আপনি কনফিগারেশন পরিবর্তনটি বিলম্বিত করতে চাইতে পারেন।
একটি অ্যাপ ডার্ক থিমের বাস্তবায়ন করতে পারে, যদি ঘোষণা করা হয় যে প্রতিটি Activity uiMode কনফিগারেশন পরিবর্তন পরিচালনা করতে পারবে:
<activity
android:name=".MyActivity"
android:configChanges="uiMode" />
যখন কোনো Activity ঘোষণা করে যে এটি কনফিগারেশন পরিবর্তন পরিচালনা করে, তখন থিম পরিবর্তনের ক্ষেত্রে এর onConfigurationChanged() মেথডটি কল করা হয়।
বর্তমান থিম কী তা পরীক্ষা করতে, অ্যাপগুলি এই ধরনের কোড চালাতে পারে:
কোটলিন
val currentNightMode = configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK when (currentNightMode) { Configuration.UI_MODE_NIGHT_NO -> {} // Night mode is not active, we're using the light theme. Configuration.UI_MODE_NIGHT_YES -> {} // Night mode is active, we're using dark theme. }
জাভা
int currentNightMode = configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK; switch (currentNightMode) { case Configuration.UI_MODE_NIGHT_NO: // Night mode is not active, we're using the light theme break; case Configuration.UI_MODE_NIGHT_YES: // Night mode is active, we're using dark theme break; }
