this presentation is for meetup which is a report from google i/o 2019
getting started with dark themeby punchdrunker
View Slide
ࣗݾհ• 2010ʙ iOS/AndroidͷΞϓϦΛॻ͍ͯΈΔ• 2011ʙ SNS mixi(ϛΫγΟ)• 2016ʙ ՈΞϧόϜ ΈͯͶ(ϛΫγΟ)• DroidKaigiͱ͔shibuya.apkΛӡӦ
Dark themeQ͔Β৽͍͠ Dark themeʹͳͬͨ(P͔Β͋ͬͨ)• লిྗ• ࢹ֮োͷ͋Δਓʹ͍͞͠• ҉͍ॴͰݟ͘͢ͳΔ
։ൃऀ͕औΔ͖ରԠ
։ൃऀ͕औΔ͖ରԠԿ͠ͳͯ͘ಛʹࠔΒͳ͍
ରԠͨ͠ํ͕͍͍ΞϓϦ• ҉͍ͱ͜ΖͰͬͯཉ͍͠ͳΒରԠͯ͋͛͠Δͱ• എܠ͕ന͍ΞϓϦରԠ͢ΔͱলΤωʹͳΔ͔• ͢ͰʹUiModeManageͳͲͰnight modeରԠ͍ͯ͠Δ߹ରԠ͕ඞཁ• ΞϓϦͰςʔϚΓସ͑Ͱ͖Δͱ͔• AppCompatDelegateΛͬͯ͋͛Δ
Ϣʔβʔͱͯ͠ͷ͍ํ• ઃఆΞϓϦ͔Β༗ޮʹ• Ұ༗ޮʹ͢Δͱ௨ϝχϡʔʹग़ݱ͢Δ• PixelͩͱόοςϦʔηʔόʔΛ༗ޮʹͨ࣌͠Dark themeʹͳΔ
։ൃऀଆ͔Βݟ͍ͨํ• AppThemeΛDayNightΛܧঝͨ͠ͷʹ͢Δͱ(ඞਢ)• Theme.MaterialComponents.DayNightΛਪ• (Theme.AppCompat.DayNight ͋Δ)• DayNightͳAppThemeΛઃఆ͢Δ͜ͱͰɺViewͷഎܠͳͲྑ͍ײ͡ʹͯ͘͠ΕΔ
։ൃऀଆ͔Βݟ͍ͨํجຊతʹ-night ͳϦιʔε͕༏ઌͯ͠ࢀর͞ΕΔ• drawable-night• values-night ͳͲͳͲ
ΞϓϦͷதͰͷΓସ͑ํ• UiModeManager(api 8Ҏ্)• P·ͰͳΒɺ͜Ε͚ͩͰࣅͨΑ͏ͳࣄ͕࣮ݱͰ͖Δɻ• AppCompatDelegate(api 14Ҏ্)• ͷϞʔυΓସ͑ΛࢀরͰ͖Δ• Qͷnight nodeʹରԠਖ਼Կ͕ҧ͏͔Α͘Θ͔Βͳ͍ɻɻɻ
// มߋͯ͠AppCompatDelegate.setDefaultNightMode(mode)// ө͢Δ// appcompat:1.1.0-alpha05͔Βෆཁdelegate.applyDayNight()// มߋͷ௨͜Ε͕ݺΕΔonNightModeChanged(mode)
mode• MODENIGHTFOLLOW_SYSTEM• MODENIGHTNO• MODENIGHTYES• MODENIGHTAUTO• ࣌ؒఆΆ͍?
৭ͷܾΊํMDGʹ͋Δͱ͓ΓϓϥΠϚϦͰݴ͏ͱ- ࠇΛ͏ͱͯ͠ɺਅͬࠇආ͚Δ(#121212͘Β͍)- ͱͱͷ৭Λ͍͍ͨ߹ɺͦͷ··Ͱͳ͘ͷ࠼ΛԼ͛Δͱྑ͍(4.5:1ʹԼ͛ͨͷ)
৭ͷఆٛΛཧ͢ΔʹΞϓϦͷߏʹΑͬͯରԠํ͕มΘΔͷͰɺਖ਼ղͳͦ͞͏ɻݱঢ়͔Β࠷ྑ͍ํΛߟ͑·͠ΐ͏ɻ• ৭໊ʹblackͱ͔whiteͱ͔͏ͷΊͨํ͕Αͦ͞͏(transparentͳΒ͍͍͔)• ػೳ෦ͷ໊લʹ͠·͠ΐ͏
Demohttps://github.com/punchdrunker/hocho/pull/46/files
Referenceجຊ༷https://developer.android.com/preview/features/darkthemeAndroidͰͷσϑΥϧτ࣮ʹ͍ͭͯhttps://material.io/develop/android/theming/dark/ؔ࿈APIhttps://developer.android.com/reference/androidx/appcompat/app/AppCompatDelegate.html#MODENIGHTFOLLOW_SYSTEM
Reference۩ମతͳରԠํMDG͔Βhttps://material.io/design/color/dark-theme.html#usage࣮ફతͳհhttps://medium.com/androiddevelopers/appcompat-v23-2-daynight-d10f90c83e94