
ডার্ক থিম অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) এবং তার পরবর্তী ভার্সনে পাওয়া যাবে। এর নিম্নলিখিত সুবিধা রয়েছে:
- ডিভাইসের স্ক্রিন প্রযুক্তির উপর নির্ভর করে উল্লেখযোগ্য পরিমাণে বিদ্যুৎ ব্যবহার হ্রাস করে।
- কম দৃষ্টিশক্তিসম্পন্ন এবং উজ্জ্বল আলোর প্রতি সংবেদনশীল ব্যবহারকারীদের জন্য দৃশ্যমানতা উন্নত করে।
- কম আলোর পরিবেশে ডিভাইস ব্যবহার করা সহজ করে তোলে।
ডার্ক থিম অ্যান্ড্রয়েড সিস্টেম UI এবং ডিভাইসে চলমান অ্যাপগুলিতে প্রযোজ্য।
অ্যান্ড্রয়েড ১০ এবং তার পরবর্তী ভার্সনে ডার্ক থিম সক্ষম করার তিনটি উপায় রয়েছে:
- ডার্ক থিম সক্ষম করতে সেটিংস > ডিসপ্লে > থিম- এ নেভিগেট করে সিস্টেম সেটিং ব্যবহার করুন।
- সক্রিয় থাকা অবস্থায়, বিজ্ঞপ্তি ট্রে থেকে থিমগুলি স্যুইচ করতে দ্রুত সেটিংস টাইল ব্যবহার করুন।
- Pixel ডিভাইসে, একই সাথে ডার্ক থিম চালু করতে ব্যাটারি সেভার মোড চালু করুন। অন্যান্য ডিভাইস এই আচরণ সমর্থন নাও করতে পারে।
WebView কম্পোনেন্ট ব্যবহার করে ওয়েব-ভিত্তিক কন্টেন্টে ডার্ক থিম প্রয়োগ করার নির্দেশাবলীর জন্য, WebView-এ ডার্কনেস ওয়েব কন্টেন্ট দেখুন।
আপনার অ্যাপে ডার্ক থিম সাপোর্ট করুন
ডার্ক থিম সাপোর্ট করার জন্য, আপনার অ্যাপের থিম সেট করুন—যা সাধারণত res/values/styles.xml এ পাওয়া যায়—যা DayNight থিম থেকে উত্তরাধিকারসূত্রে পাওয়া যায়:
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
আপনি Material Components ডার্ক থিমটিও ব্যবহার করতে পারেন:
<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।
থিম পরিবর্তন করতে, নিম্নলিখিতগুলি করুন:
API লেভেল ৩১ এবং তার উপরে,
UiModeManager#setApplicationNightModeব্যবহার করে সিস্টেমকে জানাতে হবে যে আপনার অ্যাপটি কোন থিম চালায়। এটি স্প্ল্যাশ স্ক্রিনের সময় সিস্টেমটিকে থিমের সাথে মেলাতে দেয়।API লেভেল ৩০ এবং তার নিচের ক্ষেত্রে, থিম পরিবর্তন করতে
AppCompatDelegate.setDefaultNightMode()ব্যবহার করুন।
ফোর্স ডার্ক
অ্যান্ড্রয়েড ১০ ফোর্স ডার্ক প্রদান করে, যা ডেভেলপারদের জন্য একটি বৈশিষ্ট্য যা DayNight থিম স্পষ্টভাবে সেট না করেই দ্রুত একটি ডার্ক থিম বাস্তবায়ন করতে পারে।
ফোর্স ডার্ক আপনার হালকা-থিমযুক্ত অ্যাপের প্রতিটি ভিউ বিশ্লেষণ করে এবং স্ক্রিনে আসার আগে স্বয়ংক্রিয়ভাবে একটি ডার্ক থিম প্রয়োগ করে। ডার্ক থিম বাস্তবায়নের জন্য প্রয়োজনীয় সময় কমাতে আপনি ফোর্স ডার্ক এবং নেটিভ বাস্তবায়নের মিশ্রণ ব্যবহার করতে পারেন।
অ্যাপগুলিকে অ্যাক্টিভিটির থিমে android:forceDarkAllowed="true" সেট করে Force Dark-এ অপ্ট ইন করতে হবে। এই অ্যাট্রিবিউটটি সমস্ত সিস্টেম- এবং AndroidX-প্রদত্ত হালকা থিমগুলিতে সেট করা আছে, যেমন Theme.Material.Light । যখন আপনি Force Dark ব্যবহার করেন, তখন আপনার অ্যাপটি পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন এবং প্রয়োজনে ভিউ বাদ দিন।
যদি আপনার অ্যাপটি একটি অন্ধকার থিম ব্যবহার করে, যেমন Theme.Material , তাহলে Force Dark প্রয়োগ করা হয় না। একইভাবে, যদি আপনার অ্যাপের থিমটি একটি DayNight থিম থেকে উত্তরাধিকারসূত্রে আসে, তাহলে স্বয়ংক্রিয় থিম স্যুইচিংয়ের কারণে Force Dark প্রয়োগ করা হয় না।
ভিউতে ফোর্স ডার্ক অক্ষম করুন
android:forceDarkAllowed লেআউট অ্যাট্রিবিউট অথবা setForceDarkAllowed() ব্যবহার করে নির্দিষ্ট ভিউতে Force Dark নিয়ন্ত্রণ করা যেতে পারে।
ওয়েব কন্টেন্ট
ওয়েব-ভিত্তিক কন্টেন্টে ডার্ক থিম ব্যবহার সম্পর্কে তথ্যের জন্য, WebView-এ ডার্কনেস ওয়েব কন্টেন্ট দেখুন। WebView-এ প্রয়োগ করা ডার্ক থিম কীভাবে ব্যবহার করা হয় তার উদাহরণের জন্য, GitHub-এ WebView ডেমো দেখুন।
সেরা অনুশীলন
নিম্নলিখিত বিভাগগুলিতে অন্ধকার থিম বাস্তবায়নের জন্য সর্বোত্তম অনুশীলনগুলি প্রদান করা হয়েছে।
বিজ্ঞপ্তি এবং উইজেট
ডিভাইসে আপনি যে UI সারফেসগুলি প্রদর্শন করেন কিন্তু সরাসরি নিয়ন্ত্রণ করেন না, সেগুলির জন্য নিশ্চিত করুন যে আপনার ব্যবহৃত যেকোনো ভিউ হোস্ট অ্যাপের থিমকে প্রতিফলিত করে। দুটি উদাহরণ হল বিজ্ঞপ্তি এবং লঞ্চার উইজেট।
বিজ্ঞপ্তি
সিস্টেম-প্রদত্ত বিজ্ঞপ্তি টেমপ্লেট ব্যবহার করুন, যেমন MessagingStyle । এর অর্থ হল সিস্টেমটি সঠিক ভিউ স্টাইলিং প্রয়োগের জন্য দায়ী।
উইজেট এবং কাস্টম বিজ্ঞপ্তি দর্শন
লঞ্চার উইজেটের জন্য, অথবা যদি আপনার অ্যাপ কাস্টম নোটিফিকেশন কন্টেন্ট ভিউ ব্যবহার করে, তাহলে হালকা এবং অন্ধকার উভয় থিমে কন্টেন্ট পরীক্ষা করুন।
সাধারণ যে সমস্যাগুলোর দিকে নজর রাখতে হবে তার মধ্যে রয়েছে:
- ধরে নিচ্ছি পটভূমির রঙ সবসময় হালকা।
- টেক্সটের রঙ হার্ডকোড করা হচ্ছে।
- ডিফল্ট টেক্সট রঙ ব্যবহার করার সময় একটি হার্ডকোডেড ব্যাকগ্রাউন্ড রঙ সেট করা।
- একটি স্থির রঙের অঙ্কনযোগ্য আইকন ব্যবহার করা।
এই সমস্ত ক্ষেত্রে, হার্ডকোডেড রঙের পরিবর্তে উপযুক্ত থিম বৈশিষ্ট্য ব্যবহার করুন।
লঞ্চ স্ক্রিন
যদি আপনার অ্যাপের একটি কাস্টম লঞ্চ স্ক্রিন থাকে, তাহলে আপনাকে এটি পরিবর্তন করতে হতে পারে যাতে এটি নির্বাচিত থিমটি প্রতিফলিত করে।
প্রোগ্রাম্যাটিকভাবে সাদা রঙে সেট করা ব্যাকগ্রাউন্ডের মতো হার্ডকোডেড রঙগুলি সরিয়ে ফেলুন। পরিবর্তে ?android:attr/colorBackground থিম অ্যাট্রিবিউট ব্যবহার করুন।
কনফিগারেশন পরিবর্তন
যখন অ্যাপের থিম পরিবর্তন হয়, সিস্টেম সেটিং বা অ্যাপকম্প্যাটের মাধ্যমে, তখন এটি একটি 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; }
