Googles nästa version av Android, Android 10 Q, kommer att innehålla ett mörkt läge för hela systemet. Hur kommer appar i Android Q att hantera mörka teman?
I vår första inlägg När vi beskriver förändringarna vi hittade från Android Q-bygget under utveckling som vi fick, talade vi kort om det mörka läget som gör alla glada. För att sammanfatta kan Googles inbyggda mörka läge i Android Q aktiveras via ett nytt "Mörkt läge" -alternativ i Display Settings. Mörkt läge kan antingen vara alltid av, alltid på eller aktiverat automatiskt på natten och inaktiverat på morgonen. Mörkt läge är teman för SystemUI (volympanel, strömmeny, panel för snabbinställningar, aviseringar), appen Inställningar och ramverk (accentfärg, etc.).
Ovan: Dark Mode i Android Q på Google Pixel 3 XL. Nedan: Lätt tema i Android Pie på Google Pixel 2 XL.
Google vill dock inte bara att systemelement ska ha mörkt tema. De arbetar också för att se till att alla deras förstapartsappar stöder mörkt läge när användaren vänder på strömbrytaren. Google-appar som
Meddelanden, Telefon, Kontakter, Nyheter, Spela spel, Youtube, Kartor, och mer har uppdaterats med växlar för mörkt läge för användaren, medan andra appar gillar Google Chrome håller fortfarande på att reda ut eventuella kinks inför Google I/O 2019. Google har också börjat uppmuntra tredjepartsapputvecklare att göra det omfamna mörka teman i sina appar eftersom företaget medger att de är bra för batteritid (åtminstone på smartphones med OLED-skärmar.)För att hjälpa utvecklare att uppdatera sina appar med stöd för Android Q: s mörka läge, tillhandahåller Google ett nytt utvecklaralternativ som verkar tvinga alla appar att byta till mörkt läge. Det här alternativet är inte avsett för användare som vill använda mörkt läge, eftersom det är svårt för systemet att välja rätt färger för alla appar som inte har ett inbyggt mörkt läge. Lyckligtvis har Google redan lagt grunden för appar för att stödja mörka lägen, och det finns redan många appar som ser bra ut med Android Q: s alternativ för åsidosätt mörkt läge aktiverat även om appen inte har ett användarvänligt mörkt läge växla. Här är en samling skärmdumpar från 24 olika appar som visar hur de ser ut när ett mörkt läge tvingas på dem med Android Q: s åsidosättande av mörkt läge. Alla appar kommer inte att se lika bra ut, som jag ska visa dig nedan.
Implementering av mörkt läge i Android Q
I API-nivå 8 (Android 2.2 Froyo) introducerade Google -nattkval för resurser. Apputvecklare kunde växla mellan dag- och nattläge med setNightMode in UiModeManager. Men setNightMode kräver att enheten är i billäge eller i dockat läge om enheten är på API-nivå 22 eller lägre. AppCompat v23.2 kom med DayNight-implementeringen, som låter appar som Reddit-klienter automatiskt växla mellan sina dag- och nattteman baserat på tiden på dygnet med AppCompatDeletegate.setDefaultNightMode(). API-nivå 28 (Android 9 Pie) gjorde att MODE_NIGHT_FOLLOW_SYSTEM (standardvärdet för setDefaultNightMode()) följer den användardefinierade systeminställningen i Inställningar --> Utvecklaralternativ --> Nattläge. Google är jobbar på förbättringar av DayNight API i AppCompat, särskilt när det gäller "vanliga problem" som problem med WebView. Slutligen har Google aktiverat nattlägesdetektering och har blockerade appar utan MODIFY_DAY_NIGHT_MODE signatur/privilegierad behörighet i Android Q: s ramverk. Den sistnämnda förändringen innebär att appar inte längre kan modifiera det systemomfattande nattläget, vilket är det som gjorde det möjligt för en ny meddelandes bugg att förvirra användare i Android Pie.
Uppdatering: En uppdatering till AndroidX supportbibliotek kommer att göra det enklare för utvecklare att automatiskt aktivera mörka lägen i sina appar när enheten går in i batterisparläge.
Framtvinga mörkt läge i Android Q
Applikationer som Snapchat, Slack, AOSP Email, AOSP Messaging, AOSP Dialer och många fler har -night resurskvalificerare, även om de inte ger användaren ett sätt att använda appen med nattläget. Andra appar som inte har hårdkodade resurskvalificeringar för natten, som Facebook och Instagram, kan eller kanske inte ser bra ut med Android Q: s åsidosättande mörka tema aktiverat. Instagram ser bra ut, medan Facebook behöver mycket arbete. Från mina tester skiljer sig det åsidosättande nattlägets utvecklaralternativ mycket från färginversion i tillgänglighetsinställningarna – kanske Google har för avsikt att den här funktionen ska hjälpa utvecklare att skapa mörka lägen för sina appar medan Android Q Developer Previews är pågående. Vi kommer dock inte att veta exakt hur den här funktionen fungerar förrän källkoden för Android Q släpps eller Google publicerar dokumentation för den.
Åsidosätt mörkt läge i Android Q är mest trasigt i appar som använder WebViews.
I "Kostnad för en Pixel Color" samtal presenterat av Chris Banes och Alan Viverette från Google, uppmuntrar duon utvecklare att implementera mörka teman genom att:
- Använder DayNight API i AppCompat. Aktiewidgetar svarar automatiskt på förändringar i nattläge, eller så kan du lägga till en switch i din app också.
- Tillämpa överlagringsteman dynamiskt under körning genom att anropa getTheme().applyStyle(). Mer information finns i detta tidigare föredrag här.
- Strukturera din app så att den litar på att använda temaattribut som colorForeground, colorControlNormal, colorAccent, etc.
- Lägger till -nattkval för dina resurser. -nattkval ska användas för resurser som har svårt att extrahera temafärger.
- Aktivera det inverterade färgläget (Inställningar --> Färger --> Färginvertering) för att få en snabb uppfattning om hur din app kommer att se ut i mörkt läge. Om du vill ta en skärmdump av din app med inverterade färger bör du vara medveten om att färginversion visas inte i skärmdumpen.
Vid lanseringen kommer Android Q: s mörka läge att sträcka sig till förstaparts Google-appar, men vi hoppas att tredjepartsappar snabbt adopterar mörka teman i sina appar. Dessutom hoppas vi att fler appar automatiskt ändras till sina nattteman när användaren aktiverar den systemomfattande inställningen. Just nu är den enda appen jag har sett som automatiskt ändrar teman när Android Q: s systemomfattande mörka läge är aktiverat Google Kontakter. Vi får se hur det blir om ett par månader när Android Q släpps, men till alla utvecklare som läser detta: omfamna den mörka sidan!
Med input från LineageOS-bidragsgivare Joey Rizzoli.