ב-Android מגרסה 10 ואילך, אפליקציה יכולה לתמוך עיצוב כהה ושינוי אוטומטי בין עיצוב בהיר לעיצוב כהה של האפליקציה, בהתאם לעיצוב של המערכת. כדי להתאים את העיצוב הנוכחי של האפליקציה, תוכן מהאינטרנט ב-WebView אפשר גם להשתמש בעיצוב בהיר, כהה או ברירת מחדל.
ההתנהגות של WebView פועלת באופן הדדי עם
prefers-color-scheme
וגם
color-scheme
בסטנדרטים של אינטרנט. כשהדבר אפשרי, אם אתם מחברים את תוכן האינטרנט שאתם רוצים
להצגה של האפליקציה ב-WebView, צריך להגדיר עיצוב כהה
האתר וגם
להטמיע את prefers-color-scheme
כדי ש-WebView יוכל להתאים לתוכן באינטרנט
לעיצוב של האפליקציה.
בטבלה הבאה מוסבר איך WebView מעבד תוכן מהאינטרנט באפליקציה שלכם: בהתאם לסגנון התוכן באינטרנט ולתנאי האפליקציה שלכם:
תנאים בקשר לאפליקציות | תוכן מהאינטרנט שמשתמש ב-prefers-color-scheme |
תוכן מהאינטרנט שלא משתמשים בו ב-prefers-color-scheme |
---|---|---|
האפליקציה משתמשת בעיצוב בהיר עם
isLightTheme
מוגדר כ-true או לא מוגדר. |
ה-WebView מעבד את התוכן בעיצוב בהיר מחבר התוכן הגדיר. | WebView מעבד את התוכן בסגנון ברירת המחדל המוגדר על ידי מחבר תוכן. |
האפליקציה משתמשת אילוץ כהה אל החלה של עיצוב כהה באמצעות אלגוריתם לאפליקציה. | ה-WebView מעבד את התוכן עם העיצוב הכהה מחבר התוכן הגדיר. | אם מחבר התוכן אישר זאת, WebView מעבד את התוכן עם עיצוב כהה שנוצר באמצעות אלגוריתם. |
האפליקציה משתמשת בעיצוב כהה עם
isLightTheme
מוגדר לערך false והאפליקציה אוסרת שימוש באלגוריתם
כהה עבור WebView. |
ה-WebView מעבד את התוכן עם העיצוב הכהה מחבר התוכן הגדיר. | WebView מעבד את התוכן בסגנון ברירת המחדל המוגדר על ידי מחבר תוכן. |
האפליקציה משתמשת בעיצוב כהה עם
isLightTheme
מוגדר לערך false והאפליקציה מאפשרת
הכהה אלגוריתמית של WebView. |
ה-WebView מעבד את התוכן עם העיצוב הכהה מחבר התוכן הגדיר. | אם מחבר התוכן אישר זאת, WebView מעבד את התוכן עם עיצוב כהה שנוצר באמצעות אלגוריתם. |
סגנון של מחבר התוכן
של אפליקציה
מאפיין isLightTheme
מציין אם העיצוב של האפליקציה הוא בהיר או כהה. רכיב WebView תמיד מגדיר
prefers-color-scheme
לפי isLightTheme
. אם הערך של isLightTheme
הוא true
או לא צוין, prefers-color-scheme
הוא light
; אחרת, כנראה
dark
המשמעות היא שאם תוכן האינטרנט משתמש ב-prefers-color-scheme
ובתוכן
המחבר מאפשר זאת, העיצוב הבהיר או הכהה שהוגדר על ידי מחבר התוכן
המערכת מחילה תמיד באופן אוטומטי על התוכן באינטרנט כדי להתאים לעיצוב של האפליקציה.
כהה אלגוריתמית
כדי לכסות מקרים שבהם תוכן מהאינטרנט לא כולל
prefers-color-scheme
האפליקציה יכולה לאפשר ל-WebView, במקרה הצורך, להחיל אלגוריתם כהה
לעיצוב של תוכן האינטרנט שהוא מעבד.
אם האפליקציה משתמשת ברמת האפליקציה אילוץ כהה לשימוש באלגוריתם להחיל עיצוב כהה על האפליקציה, בקטע הבא מוסבר איך הפעלת כהה אלגוריתמיות של תוכן באינטרנט באמצעות אילוץ כהה.
אם באפליקציה לא נעשה שימוש באילוץ כהה, כיצד האפליקציה מציינת מתי לאפשר מערכת כהה אלגוריתמית ב-WebView תלויה רמת ה-API המטורגטת. אפשר לעיין בקטעים הבאים בנושא אפליקציות שמטרגטות את Android 13 ואילך וגם פרטים נוספים זמינים במאמר אפליקציות שמטרגטות ל-Android מגרסה 12 ומטה.
הרשאה להכהה באמצעות אלגוריתם להכה של תוכן באינטרנט באמצעות התכונה 'אילוץ כהה'
אם האפליקציה משתמשת ברמת האפליקציה אילוץ כהה, WebView רלוונטי שימוש אלגוריתמי להכהות של תוכן באינטרנט אם התנאים הבאים מתקיימים:
- רכיב ה-WebView ורכיבי ההורה שלו מאפשרים הגדרת 'אילוץ כהה'.
- נושא הפעילות הנוכחי מסומן כבהיר באמצעות
isLightTheme
הוגדר לערךtrue
- מחבר התוכן מהאינטרנט לא משבית באופן מפורש את האפשרות 'כהה'.
- באפליקציות שמטרגטות ל-Android 13 (רמת API 33) ואילך, תוכן האינטרנט
לא נעשה שימוש ב-
prefers-color-scheme
. - באפליקציות שמטרגטות ל-Android 12 (רמת API 32) ומטה: האפליקציה הגדירה
ההגדרה
forceDarkMode
של WebView אלFORCE_DARK_AUTO
והם הגדירו את אסטרטגיית 'כוח כהה' שלהםDARK_STRATEGY_USER_AGENT_DARKENING_ONLY
.
WebView וכל ההורים שלו יכולים לאפשר הגדרה כפויה כהה באמצעות
View.setForceDarkAllowed()
ערך ברירת המחדל נלקח מהמאפיין setForceDarkAllowed()
של
העיצוב של Android, שחייב להיות מוגדר גם כ-true
.
התכונה 'אילוץ מצב כהה' זמינה בעיקר לצורך תאימות לאחור באפליקציות לא לספק עיצוב כהה משלהם. אם האפליקציה משתמשת באילוץ כהה, מומלץ הוספת תמיכה בעיצוב כהה
הפעלה של כהה באמצעות אלגוריתם (אפליקציות שמטרגטות את Android 13 ואילך)
באפליקציות שלא משתמשות באילוץ כהה ברמת האפליקציה ומטרגטות ל-Android 13 (רמת API)
33) ואילך, יש להשתמש ב-AndroidX
setAlgorithmicDarkeningAllowed()
ו-true
כדי לציין ש-WebView צריך לאפשר שימוש באלגוריתם
מחשיך. השיטה הזו תואמת לאחור עם הגרסה הקודמת של Android
גרסאות שונות.
לאחר מכן, WebView מחילה כהה באמצעות אלגוריתם אם התנאים הבאים מתקיימים:
- התוכן באינטרנט לא משתמש ב-
prefers-color-scheme
. - מחבר התוכן מהאינטרנט לא משבית באופן מפורש את האפשרות 'כהה'.
הפעלה של כהה באמצעות אלגוריתם (אפליקציות שמטרגטות את Android 12 ומטה)
באפליקציות שלא משתמשות באילוץ כהה ברמת האפליקציה ומטרגטות ל-Android 12 (רמת API)
32) ומטה, צריך להשתמש
FORCE_DARK_ON
כדי לאפשר להכהות באמצעות אלגוריתם.
שימוש ב-FORCE_DARK_ON
יחד עם
FORCE_DARK_OFF
אם האפליקציה מספקת שיטה משלה למעבר בין עיצוב בהיר לעיצוב כהה,
כמו רכיב שניתן להחליף מצב בממשק המשתמש או בחירה אוטומטית מבוססת זמן.
כדי לבדוק אם התכונה נתמכת, צריך להוסיף את שורות הקוד הבאות
בכל מקום שבו מגדירים את אובייקט ה-WebView, למשל ב-Activity.onCreate
:
Kotlin
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) { WebSettingsCompat.setForceDark(...) }
Java
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) { WebSettingsCompat.setForceDark(...); }
אם האפליקציה מסתמכת על זיהוי שינויים בהעדפות המערכת,
להאזין מפורשות לשינויי עיצוב ולהחיל אותם על WebView באמצעות
FORCE_DARK_ON
וFORCE_DARK_OFF
מדינות.
בקטע הקוד הבא מוסבר איך לשנות את פורמט העיצוב:
Kotlin
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) { when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { Configuration.UI_MODE_NIGHT_YES -> { WebSettingsCompat.setForceDark(myWebView.settings, FORCE_DARK_ON) } Configuration.UI_MODE_NIGHT_NO, Configuration.UI_MODE_NIGHT_UNDEFINED -> { WebSettingsCompat.setForceDark(myWebView.settings, FORCE_DARK_OFF) } else -> { // } } }
Java
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) { switch (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) { case Configuration.UI_MODE_NIGHT_YES: WebSettingsCompat.setForceDark(myWebView.getSettings(), FORCE_DARK_ON); break; case Configuration.UI_MODE_NIGHT_NO: case Configuration.UI_MODE_NIGHT_UNDEFINED: WebSettingsCompat.setForceDark(myWebView.getSettings(), FORCE_DARK_OFF); break; } }
התאמה אישית של הטיפול בעיצוב כהה
אפשר גם להשתמש
ForceDarkStrategy API
ב-AndroidX כדי לקבוע איך להכהות החלה על WebView נתון. ה-API הזה
רלוונטי רק אם ההגדרה 'אילוץ כהה' מוגדרת לערך FORCE_DARK_ON
או FORCE_DARK_AUTO
.
באמצעות ה-API, האפליקציה שלך יכולה להשתמש בהכהת עיצוב האתר או בסוכן משתמש כהה:
- עיצוב כהה של אינטרנט: מפתחים של אתרים עשויים להחיל
@media (prefers-color-scheme: dark)
כדי לקבוע את ההופעה של דף אינטרנט ב: מצב כהה. מערכת WebView מעבדת תוכן בהתאם להגדרות האלה. מידע נוסף על נושא האינטרנט מחשיך, מפרט. - הכהה של סוכן משתמש: ה-WebView ממיר באופן אוטומטי צבעים באינטרנט
הדף הזה. אם משתמשים בהכהה של סוכן משתמש,
תוצאת הפונקציה
@media (prefers-color-scheme: dark)
היאfalse
.
כדי לבחור מבין שתי האסטרטגיות, משתמשים ב-API הבא:
Kotlin
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK_STRATEGY)) { WebSettingsCompat.setForceDarkStrategy(...) }
Java
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK_STRATEGY)) { WebSettingsCompat.setForceDarkStrategy(...); }
אפשרויות האסטרטגיה הנתמכות הן:
DARK_STRATEGY_PREFER_WEB_THEME_OVER_USER_AGENT_DARKENING
: זו האפשרות שמוגדרת כברירת המחדל. אמנם רוב הדפדפנים מטפלים תג<meta name="color-scheme" content="dark light">
אופציונלי, Android מצב ברירת המחדל של WebView מחייב שהמטא תג יפעל בהתאם לפונקציות של דף האינטרנטprefers-color-scheme
שאילתות מדיה. אפשר להשתמש ברכיבי WebView עםDARK_STRATEGY_WEB_THEME_DARKENING_ONLY
במצב כזה, ה-WebView תמיד מחיל שאילתות מדיה, גם אם התג שהושמט.עם זאת, אנחנו ממליצים למפתחי אתרים להוסיף
<meta name="color-scheme" content="dark light">
Tag לאתרים שלהם כדי לוודא שהתוכן יעובד כראוי ברכיבי WebView עם הגדרות ברירת המחדל.DARK_STRATEGY_USER_AGENT_DARKENING_ONLY
: נקרא "user-agentinging," ה-WebView מתעלם מכל החשכה של דפי אינטרנט מפעילה כהה באופן אוטומטי.
אם האפליקציה מציגה תוכן אינטרנט מאינטראקציה ישירה (First-Party) שהתאמת אישית באמצעות
שאילתת מדיה אחת (prefers-color-scheme
), מומלץ
DARK_STRATEGY_WEB_THEME_DARKENING_ONLY
כדי להבטיח שה-WebView ישתמש בעיצוב מותאם אישית.
כדי לראות דוגמה לעיצוב כהה שהוחל, אפשר לעיין ב הדגמה של WebView ב-GitHub