Làm thế nào để thay đổi darktheme mà không cần khởi tạo lại app?
Đầu tiên bạn phải thêm configChanges mode
vào activity trong file Manifest
Dòng code này sẽ ngăn việc khởi tạo lại ứng dụng khi áp dụng darktheme theo cách thủ công hoặc từ thanh thông báo, vì vậy nếu bạn đã sử dụng color-night.xml, nó sẽ bị bỏ qua vì ứng dụng của bạn không được tạo lại.
Vậy nếu chỉnh màu bằng tay thì sao?
Ở đây mình sẽ tạo thêm các màu với tên "Night" ở cuối để phân biệt ở file colors.xml
Sau đó, vào Activity và override lại hàm onConfigurationChanged và áp dụng màu dựa trên nightModeFlags
onConfigurationChanged sẽ được gọi khi trạng thái DayNight thay đổi. VD: Khi bạn bật/ tắt chế độ darkmode trên notification bar hay thực thi bằng code
Vậy khi fragments nằm trong Activity thì làm sao để bắt sự kiện thay đổi?
Dễ thôi, mình chỉ cần tạo một interface và các fragment sẽ kế thừa nếu muốn áp dụng darkmode
Và fragment kế thừa interface đó
Và bạn phải notify Fragments sự kiện đó ở Activity, mỗi khi configuration thay đổi, fragment cũng sẽ nhận được trạng thái DayNight
Sử dụng bằng cách sau:
Và thành quả cuối cùng