โหมดมืด (ธีมมืด) คือโทนสีที่พื้นหลังของหน้าจอเปลี่ยนเป็นสีเข้ม (เทาเข้มหรือดำ) และข้อความและองค์ประกอบต่างๆ กลายเป็นสีสว่าง โหมดมืดช่วยลดอาการปวดตาในที่แสงน้อย ประหยัดแบตเตอรี่บนหน้าจอ OLED (สูงถึง 60% ตามข้อมูลของ Google, 2019) และตอบสนองความต้องการด้านการเข้าถึงสำหรับผู้ใช้ที่มีอาการกลัวแสง ใน iOS 13 และ Android 10 โหมดมืดได้กลายเป็นตัวเลือกระบบ — ผู้ใช้เปิดธีมมืดทั่วโลก และแอปพลิเคชันจะนำไปใช้โดยอัตโนมัติ ดูรายละเอียดเพิ่มเติมได้ใน เอกสารอย่างเป็นทางการของ Android เกี่ยวกับธีมมืด.
ประเด็นสำคัญ
โหมดมืด คือโทนสีที่พื้นหลังของหน้าจอมืด (ปกติ #121212 ใน Android, #1C1C1E ใน iOS) ในขณะที่ข้อความและองค์ประกอบอินเทอร์เฟซสว่าง ต่างจากการกลับสีแบบง่ายๆ โหมดมืดที่มีคุณภาพใช้จานสีที่คัดสรรมาอย่างพิถีพิถัน: พื้นหลังเทาเข้มแทนสีดำบริสุทธิ์ (ลดเอฟเฟกต์รัศมี), ความอิ่มสีของสีเน้นที่ลดลง และเงาที่นุ่มนวล การรองรับโหมดมืดระดับระบบปรากฏใน iOS 13 (กันยายน 2019) และ Android 10 (กันยายน 2019).
เหตุผลหลักในการนำมาใช้ คือความสะดวกสบายของผู้ใช้ ในที่แสงน้อย (ตอนเย็น ในที่มืด) หน้าจอสีขาวสว่างทำให้ปวดตาและอาจกระตุ้นให้เกิดอาการปวดศีรษะ โหมดมืดช่วยลดความสว่างหน้าจอโดยไม่เสียความสามารถในการอ่าน สำหรับผู้ใช้ที่มีอาการกลัวแสงหรือไวต่อแสง ธีมมืดไม่ใช่ตัวเลือก แต่เป็นวิธีเดียวที่จะใช้แอปพลิเคชันได้อย่างสบาย ตามข้อมูลของ Android Developers ผู้ใช้ Android มากกว่า 30% เปิดธีมมืดไว้ตลอดเวลา.
โหมดมืดประหยัดแบตเตอรี่ บนหน้าจอ OLED ต่างจาก LCD ที่แบ็คไลท์เปิดอยู่ตลอดเวลา พิกเซล OLED จะส่องสว่างด้วยตัวเอง สีมืดหมายความว่าพิกเซลปิดอยู่ — การใช้พลังงานลดลง ตามข้อมูลของ Google (Android Developers Blog, 2019) บน Pixel ที่มีหน้าจอ OLED โหมดมืดที่ความสว่าง 100% ช่วยลดการใช้พลังงานลง 60% เมื่อเทียบกับธีมสว่าง บนหน้าจอ LCD การประหยัดจะน้อยมาก (ประมาณ 3–5%) เนื่องจากแบ็คไลท์ของเมทริกซ์ทำงานแยกจากสีของพิกเซล.
การรองรับระบบ สำหรับโหมดมืดผ่านหลายขั้นตอน iOS 13 (2019) นำเสนอธีมมืดทั่วโลกผ่าน UIUserInterfaceStyle Android 10 (2019) เพิ่ม Force Dark Mode สำหรับแอปพลิเคชันที่ไม่มีธีมมืดของตัวเอง Android 12 (2021) กับ Material You เริ่มสร้างจานสีมืดจากวอลเปเปอร์โดยอัตโนมัติ iOS 15 (2021) ขยาย API สำหรับ Safari และเนื้อหาเว็บ ตามข้อมูลของ StatCounter (2026) 82% ของ 100 แอปพลิเคชันยอดนิยมใน App Store และ Google Play รองรับโหมดมืด.
| แพลตฟอร์ม | เวอร์ชัน | ปี | นวัตกรรมหลัก |
|---|---|---|---|
| iOS | 13 | 2019 | UIUserInterfaceStyle, traitCollection.userInterfaceStyle |
| Android | 10 (Q) | 2019 | Force Dark Mode, ธีม DayNight ของ AppCompat |
| iOS | 15 | 2021 | ธีมมืดสำหรับเนื้อหาเว็บและ Safari |
| Android | 12 | 2021 | Material You Dynamic Themes พร้อมจานสีมืดที่สร้างโดยอัตโนมัติ |
iOS โหมดมืด API ขึ้นอยู่กับโปรโตคอล UITraitEnvironment ทุก UIViewController และ UIView มีคุณสมบัติ traitCollection.userInterfaceStyle ซึ่งสามารถเป็น .unspecified, .light หรือ .dark เมื่อธีมระบบเปลี่ยน iOS จะเรียกเมธอด traitCollectionDidChange(_:) นักพัฒนาต้องอัปเดตสีในเมธอดนี้ หรือใช้สีไดนามิก (UIColor(dynamicProvider:)) ที่สลับระหว่างจานสีสว่างและมืดโดยอัตโนมัติ.
class ViewController: UIViewController {
@IBOutlet var titleLabel: UILabel!
override func traitCollectionDidChange(_: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
updateColors()
}
}
func updateColors() {
let isDark = traitCollection.userInterfaceStyle == .dark
view.backgroundColor = isDark ? UIColor(named: "darkBackground") : .systemBackground
titleLabel.textColor = isDark ? .white : .darkText
}
}
// บังคับเปิดโหมดมืด
window.overrideUserInterfaceStyle = .dark
สีไดนามิก — วิธีที่ดีที่สุดในการใช้โหมดมืดใน iOS UIColor(named:) โหลดค่าที่แตกต่างจาก Asset Catalog โดยอัตโนมัติสำหรับลักษณะ .light และ .dark เพียงกำหนดสีใน Assets.xcassets ด้วยสองรูปแบบ (Any Appearance + Dark Appearance) แล้ว UIKit จะเลือกสีที่ถูกต้องโดยอัตโนมัติ สีระบบไดนามิก (UIColor.systemBackground, .label, .secondaryLabel) รองรับโหมดมืดอยู่แล้วและเปลี่ยนโดยอัตโนมัติ.
SwiftUI รองรับโหมดมืดตั้งแต่แกน สีและตัวปรับแต่งมาตรฐานทั้งหมด (Color.primary, .background, Color(UIColor.systemBackground)) ปรับตัวโดยอัตโนมัติ สำหรับสีที่กำหนดเอง ให้ใช้ Color(uiColor:) กับ UIColor แบบไดนามิก หรือตัวแปรสภาพแวดล้อม @Environment(\.colorScheme) สำหรับการตรวจสอบธีมอย่างชัดเจน SwiftUI View จะวาดใหม่โดยอัตโนมัติเมื่อธีมเปลี่ยน โดยไม่ต้องเรียก traitCollectionDidChange.
struct ThemeView: View {
@Environment(\.colorScheme) var colorScheme
var body: some View {
Text("โหมดมืด")
.foregroundColor(colorScheme == .dark ? .white : .black)
.background(colorScheme == .dark ? Color(.systemGray6) : .white)
}
}
Android โหมดมืด ถูกใช้งานผ่านไลบรารี AppCompat และธีม Theme.AppCompat.DayNight ในระหว่างวันใช้ธีมสว่าง ในเวลากลางคืน — ธีมมืด การเปิดใช้งานแบบบังคับถูกตั้งค่าผ่าน AppCompatDelegate.setDefaultNightMode(): MODE_NIGHT_YES (มืด), MODE_NIGHT_NO (สว่าง), MODE_NIGHT_FOLLOW_SYSTEM (ระบบ) ทรัพยากรถูกแบ่งเป็นสว่าง (res/values/styles.xml) และมืด (res/values-night/styles.xml).
// บังคับเปิดธีมมืด
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// ตั้งค่าก่อน super.onCreate
AppCompatDelegate.setDefaultNightMode(
AppCompatDelegate.MODE_NIGHT_YES
)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
// กำหนดธีมปัจจุบัน
private val isDarkMode: Boolean
get() = (resources.configuration.uiMode and
Configuration.UI_MODE_NIGHT_MASK) ==
Configuration.UI_MODE_NIGHT_YES
}
// ลงทะเบียนโหมดกลางคืนใน AndroidManifest.xml
// android:configChanges="uiMode"
Force Dark Mode เป็นคุณสมบัติระบบใน Android 10+ ที่กลับสีของแอปพลิเคชันที่ไม่รองรับธีมมืดโดยอัตโนมัติ เปิดใช้งานผ่านตัวเลือกนักพัฒนาหรือผ่านแอตทริบิวต์ android:forceDarkAllowed="true" ในธีม นี่เป็นวิธีแก้ปัญหาชั่วคราว: สำหรับการผลิต คุณต้องใช้จานสีมืดของคุณเองผ่าน values-night มิฉะนั้นคุณภาพของภาพจะต่ำ (ไอคอนกลับสี, สีที่อ่านยาก).
Material You (Android 12+) สร้างสีหลัก 5 สีจากวอลเปเปอร์ของอุปกรณ์โดยอัตโนมัติ: primary, secondary, tertiary, neutral, neutralVariant สำหรับแต่ละสีจะสร้างจานสีสว่างและมืด นักพัฒนาใช้แอตทริบิวต์: ?attr/colorPrimary, ?attr/colorOnPrimary, ?attr/colorSurface ระบบจะเลือกรูปแบบสำหรับธีมปัจจุบันด้วยตัวเอง Dynamic Color รองรับบน Android 12+ กับ Material Design 3 (คอมโพเนนต์ com.google.android.material:material).
// values/themes.xml — ธีมสว่าง
<style name="Theme.MyApp" parent="Theme.Material3.DayNight">
<item name="colorPrimary">@color/primary_light</item>
<item name="colorOnPrimary">@color/on_primary_light</item>
</style>
// values-night/themes.xml — ธีมมืด
<style name="Theme.MyApp" parent="Theme.Material3.DayNight">
<item name="colorPrimary">@color/primary_dark</item>
<item name="colorOnPrimary">@color/on_primary_dark</item>
</style>
การออกแบบโหมดมืด ไม่ใช่แค่การกลับสี Google Material Design แนะนำให้ใช้เทาเข้ม (#121212) แทนสีดำบริสุทธิ์ สีดำบริสุทธิ์ (#000000) สร้างคอนทราสต์สูงเกินไปกับข้อความสีขาว ทำให้เกิดเอฟเฟกต์รัศมี (แสงรอบตัวอักษร) ระดับความสูงขององค์ประกอบแสดงผ่านสี: ยิ่งองค์ประกอบสูงเท่าไร พื้นหลังก็ยิ่งสว่างมากขึ้นเท่านั้น การ์ดบนพื้นหลัง — #1E1E1E, ไดอะล็อก — #2D2D2D, แผงนำทาง — #383838.
คอนทราสต์สี ในโหมดมืดควรต่ำกว่าโหมดสว่าง Material Design แนะนำ: ข้อความหลัก — สีขาว (#FFFFFF) ที่ความทึบ 87%, รอง — 60%, ปิดใช้งาน — 38% สีเน้นควรมีความอิ่มสีน้อยกว่า: ถ้าในธีมสว่าง primary = #6200EE ดังนั้นในธีมมืด — #BB86FC (สีม่วงอ่อนและนุ่ม) ตาม WCAG 2.1 ต้องรักษาคอนทราสต์ขั้นต่ำ 4.5:1 สำหรับข้อความปกติในทั้งสองธีม.
| องค์ประกอบ | โหมดสว่าง | โหมดมืด | คอนทราสต์ |
|---|---|---|---|
| พื้นหลังหน้าจอ | #FFFFFF | #121212 | — |
| การ์ด | #F5F5F5 | #1E1E1E | ระดับความสูง 1dp |
| ข้อความหลัก | #000000 87% | #FFFFFF 87% | 15.8:1 |
| ข้อความรอง | #000000 60% | #FFFFFF 60% | 9.0:1 |
| สีหลัก | #6200EE | #BB86FC | 7.2:1 |
รูปภาพและไอคอน ต้องการการจัดการแยกต่างหากในธีมมืด ไอคอนที่มีความโปร่งใสควรถูกเปลี่ยนสีเป็นสีสว่าง รูปภาพที่มีพื้นหลังสว่างอาจทำให้แสบตา — แนะนำให้ลดความสว่างลง 20-30% หรือเพิ่มโอเวอร์เลย์โปร่งแสง สำหรับโลโก้และองค์ประกอบแบรนด์ ให้ใช้รุ่นสำหรับพื้นหลังมืด iOS Asset Catalog และ Android VectorDrawable รองรับทรัพยากรแยกต่างหากสำหรับธีมสว่างและมืด.
การเลือกระหว่างธีม ขึ้นอยู่กับสภาพการใช้งาน ประเภทเนื้อหา และความชอบของผู้ใช้ การศึกษาของ Nielsen Norman Group (2020) แสดงให้เห็นว่า: ภายใต้แสงปกติ โหมดสว่างให้ความเร็วในการอ่านสูงกว่า 15-20% อย่างไรก็ตาม ในสภาพแสงน้อย โหมดมืดช่วยลดความเมื่อยล้าของดวงตาและปรับปรุงความสามารถในการอ่าน สำหรับอินเทอร์เฟซที่มีข้อความปริมาณมาก (บทความ, เอกสาร) โหมดสว่างมักจะดีกว่า.
การใช้พลังงาน เป็นข้อโต้แย้งหลักสำหรับโหมดมืดบน OLED ตามข้อมูลของ Google (2019) YouTube ในธีมมืดบนหน้าจอ OLED ใช้พลังงานน้อยกว่าในธีมสว่าง 43% Google Maps — 32% ยิ่งอินเทอร์เฟซสว่างมากขึ้นและระดับความสว่างหน้าจอสูงขึ้นเท่าไร การประหยัดก็ยิ่งมากขึ้นเท่านั้น บนหน้าจอ LCD การประหยัดไม่เกิน 5% สำหรับผู้ใช้ที่ทำงานกับแอปพลิเคชันกลางแจ้งภายใต้แสงแดดจ้า โหมดสว่างยังคงเป็นตัวเลือกเดียวที่อ่านได้.
| เกณฑ์ | โหมดมืด | โหมดสว่าง |
|---|---|---|
| ความสามารถในการอ่านในที่สว่าง | ต่ำ (แสงสะท้อนบนพื้นหลังมืด) | สูง (คอนทราสต์สูงสุด) |
| อาการปวดตาในที่มืด | ต่ำ | สูง (แสงสว่างจ้า) |
| การใช้พลังงาน OLED | ต่ำ (สูงถึง -60%) | สูง |
| การใช้พลังงาน LCD | ใกล้เคียงกัน (±5%) | ใกล้เคียงกัน (±5%) |
| การรับรู้สี | บิดเบือน (ความอิ่มสีลดลง) | เป็นธรรมชาติ |
| การปรับตัว | ต้องใช้เวลาในการปรับตัว | เป็นธรรมชาติสำหรับดวงตา |
คำแนะนำจาก IT Sectr — เรานำเสนอทั้งสองธีมพร้อมตัวเลือกการสลับ: ระบบ (ตามระบบ), มืด, สว่าง การสลับอัตโนมัติไม่ควรเป็นตัวเลือกเดียว — ผู้ใช้อาจต้องการธีมมืดในตอนกลางวัน (สำหรับไมเกรน) หรือธีมสว่างในตอนกลางคืน (สำหรับอ่านหนังสือ) ในโปรเจกต์ของเรา เราเพิ่มสวิตช์ธีมในการตั้งค่าโปรไฟล์และจดจำตัวเลือก สำหรับแอปพลิเคชันที่มีเนื้อหาพรีเมียม (รูปภาพ, วิดีโอ) แนะนำให้ดูตัวอย่างธีมก่อนนำไปใช้.
คำถามที่พบบ่อย
ใช่ บนหน้าจอ OLED การประหยัดอาจสูงถึง 60% (Google, Pixel, 2019) ยิ่งอินเทอร์เฟซสว่างมากเท่าไร การประหยัดก็ยิ่งมากขึ้นเท่านั้น บนหน้าจอ LCD ความแตกต่างน้อยมาก — สูงถึง 5% เนื่องจากแบ็คไลท์ของเมทริกซ์ทำงานแยกจากสีของพิกเซล ถ้าผู้ใช้ใช้แอปพลิเคชันที่มีองค์ประกอบสีขาวเป็นหลักเป็นประจำ โหมดมืดจะให้ผลสูงสุด.
โหมดมืด เป็นแนวคิดทั่วไปของรูปแบบอินเทอร์เฟซมืด Material You Dynamic Themes (Android 12+) เป็นการนำไปใช้ที่สร้างจานสีมืดจากวอลเปเปอร์ของอุปกรณ์โดยอัตโนมัติ ผู้ใช้สามารถบังคับเปิดธีมมืด และ Material You จะปรับสีให้เป็นจานสีส่วนบุคคลแทนที่จะใช้สีมืดตายตัว.
ไปที่ การตั้งค่า → จอภาพและความสว่าง → รูปลักษณ์ และเลือก «มืด» ในทางโปรแกรม: ตั้งค่า window.overrideUserInterfaceStyle = .dark ใน AppDelegate นอกจากนี้ยังมีการสลับอัตโนมัติตามตารางเวลา (พระอาทิตย์ตก/พระอาทิตย์ขึ้น หรือเวลาที่กำหนดเอง) ซึ่งช่วยให้เปลี่ยนระหว่างธีมได้อย่างราบรื่นตลอดทั้งวัน.
forceDarkMode (Android 10+) เป็นตัวเลือกระบบสำหรับบังคับเปิดธีมมืดในแอปพลิเคชันที่ไม่รองรับโดยตรง Android จะกลับสีหน้าจอโดยอัตโนมัติ สำหรับธีมมืดที่มีคุณภาพ นักพัฒนาต้องใช้จานสีของตัวเองผ่าน values-night และปิดการใช้งาน forceDarkAllowed.
โหมดมืด ของระบบปรากฏใน iOS 13 (กันยายน 2019) และ Android 10 (กันยายน 2019) ก่อนหน้านั้น นักพัฒนาต้องใช้ธีมมืดด้วยตัวเอง ในปี 2026 แอปพลิเคชันยอดนิยมมากกว่า 80% ใน App Store และ Google Play รองรับโหมดมืด และ Apple และ Google แนะนำให้เป็นตัวเลือกบังคับ.
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ