অন্ধকার থিম Android 10 (API স্তর 29) এবং উচ্চতর সংস্করণে উপলব্ধ। এর নিম্নলিখিত সুবিধা রয়েছে:
- ডিভাইসের স্ক্রীন প্রযুক্তির উপর নির্ভর করে একটি উল্লেখযোগ্য পরিমাণে পাওয়ার ব্যবহার হ্রাস করে।
- কম দৃষ্টিসম্পন্ন ব্যবহারকারী এবং যারা উজ্জ্বল আলোর প্রতি সংবেদনশীল তাদের জন্য দৃশ্যমানতা উন্নত করে।
- কম আলোর পরিবেশে একটি ডিভাইস ব্যবহার করা সহজ করে তোলে।
ডার্ক থিম অ্যান্ড্রয়েড সিস্টেম UI এবং ডিভাইসে চলমান অ্যাপগুলিতে প্রযোজ্য।
অ্যান্ড্রয়েড 10 এবং উচ্চতর তে অন্ধকার থিম সক্ষম করার তিনটি উপায় রয়েছে:
- অন্ধকার থিম সক্ষম করতে সেটিংস > প্রদর্শন > থিমে নেভিগেট করে সিস্টেম সেটিং ব্যবহার করুন।
- সক্রিয় থাকা অবস্থায় বিজ্ঞপ্তি ট্রে থেকে থিম পরিবর্তন করতে দ্রুত সেটিংস টাইল ব্যবহার করুন৷
- Pixel ডিভাইসে, একই সময়ে অন্ধকার থিম চালু করতে ব্যাটারি সেভার মোড চালু করুন। অন্যান্য ডিভাইস এই আচরণ সমর্থন নাও হতে পারে.
একটি 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
।
থিম পরিবর্তন করতে, নিম্নলিখিতগুলি করুন:
এপিআই লেভেল 31 এবং তার উপরে,
UiModeManager#setApplicationNightMode
ব্যবহার করুন যাতে আপনার অ্যাপটি কী থিম চালায় তা সিস্টেমকে জানাতে। এটি স্প্ল্যাশ স্ক্রিনের সময় সিস্টেমটিকে থিমের সাথে মেলাতে দেয়।API স্তর 30 এবং নীচে, থিম পরিবর্তন করতে
AppCompatDelegate.setDefaultNightMode()
ব্যবহার করুন৷
ফোর্স ডার্ক
অ্যান্ড্রয়েড 10 ফোর্স ডার্ক প্রদান করে, DayNight
থিম স্পষ্টভাবে সেট না করেই একটি অন্ধকার থিম দ্রুত বাস্তবায়ন করার জন্য ডেভেলপারদের জন্য একটি বৈশিষ্ট্য।
ফোর্স ডার্ক আপনার হালকা-থিমযুক্ত অ্যাপের প্রতিটি দৃশ্য বিশ্লেষণ করে এবং স্ক্রিনে আঁকার আগে একটি অন্ধকার থিম স্বয়ংক্রিয়ভাবে প্রয়োগ করে। অন্ধকার থিম বাস্তবায়নের জন্য প্রয়োজনীয় সময় কমাতে আপনি ফোর্স ডার্ক এবং নেটিভ ইমপ্লিমেন্টেশনের মিশ্রণ ব্যবহার করতে পারেন।
অ্যাপ্লিকেশানগুলির কার্যকলাপের থিমে android:forceDarkAllowed="true"
সেট করে ফোর্স ডার্ক নির্বাচন করতে হবে৷ এই বৈশিষ্ট্যটি সমস্ত সিস্টেম- এবং AndroidX-প্রদত্ত হালকা থিমগুলিতে সেট করা আছে, যেমন Theme.Material.Light
। আপনি যখন ফোর্স ডার্ক ব্যবহার করেন, তখন আপনার অ্যাপটি পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন এবং প্রয়োজন অনুযায়ী ভিউ বাদ দিন।
যদি আপনার অ্যাপ একটি অন্ধকার থিম ব্যবহার করে, যেমন Theme.Material
), তাহলে ফোর্স ডার্ক প্রয়োগ করা হয় না। একইভাবে, যদি আপনার অ্যাপের থিম DayNight
থিম থেকে উত্তরাধিকারসূত্রে পাওয়া যায়, তাহলে স্বয়ংক্রিয় থিম স্যুইচিংয়ের কারণে ফোর্স ডার্ক প্রয়োগ করা হয় না।
একটি দৃশ্যে ফোর্স ডার্ক অক্ষম করুন
ফোর্স ডার্ককে 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; }