קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
WebView הוא רכיב נפוץ שמציע מערכת מתקדמת לניהול המצב. WebView חייב לשמור על המצב והמיקום שלו בגלילה במהלך שינויים בהגדרות. המיקום של WebView יכול להשתנות כשהמשתמש מסובב את המכשיר או פותח טלפון מתקפל, וכתוצאה מכך המשתמש צריך לגלול שוב מהחלק העליון של WebView למיקום הגלילה הקודם.
WebView מנהל את המצב שלו בצורה טובה. כדי לנצל את המאפיין הזה, כדאי לנהל כמה שינויים בהגדרות אישיות כדי לצמצם את מספר הפעמים שבהן WebView נוצר מחדש. האפליקציה צריכה לטפל בשינויים בהגדרות כי יצירת מחדש של הפעילות (הדרך שבה המערכת מטפלת בשינויים בהגדרות) יוצרת מחדש את WebView, וכתוצאה מכך WebView מאבד את המצב שלו.
ניהול המצב
מומלץ להימנע ככל האפשר מיצירה מחדש של Activity במהלך שינויים בהגדרות, ולאפשר ל-WebView להתבטל כדי שאפשר יהיה לשנות את הגודל שלו תוך שמירה על המצב שלו.
כדי לנהל את המצב של WebView:
הצהרה על שינויים בהגדרות שמטופלים על ידי האפליקציה
ביטול התוקף של המצב WebView
1. הוספת שינויים בהגדרות לקובץ AndroidManifest.xml של האפליקציה
כדי למנוע יצירה מחדש של פעילות, צריך לציין את שינויי התצורה שמטופלים על ידי האפליקציה (ולא על ידי המערכת):
השלב הזה רלוונטי רק למערכת התצוגה, כי ל-Jetpack Compose אין צורך לבטל את התוקף של שום דבר כדי לשנות את הגודל של רכיבי Composable בצורה נכונה. עם זאת, אם לא מנהלים את WebView בצורה נכונה, Compose יוצר אותו מחדש לעיתים קרובות.
נקודות עיקריות
android:configChanges: מאפיין של רכיב <activity> במניפסט. רשימה של שינויי ההגדרות שמטופלים על ידי הפעילות.
View#invalidate(): שיטה שגורמת לציור מחדש של תצוגה. הועברה בירושה ל-WebView.
תוצאות
רכיבי WebView של האפליקציה שומרים עכשיו את המצב ואת מיקום הגלילה שלהם במהלך מספר שינויים בהגדרות, החל משינויים בגודל ועד לשינויים בכיוון המכשיר, ועד לקיפול המכשיר ופתיחתו.
אוספים שמכילים את המדריך הזה
המדריך הזה הוא חלק מהאוספים הבאים של מדריכים מהירים, שמכסים יעדים רחבים יותר לפיתוח Android:
אופטימיזציה למסכים גדולים
מאפשרים לאפליקציה לתמוך בחוויית משתמש אופטימלית בטאבלטים, במכשירים מתקפלים ובמכשירי ChromeOS.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-02-06 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-02-06 (שעון UTC)."],[],[],null,["# Manage WebView state\n\n[`WebView`](/reference/kotlin/android/webkit/WebView) is a commonly used\ncomponent that offers an advanced system for state management. A `WebView`\nmust maintain its state and scroll position across configuration changes. A\n`WebView` can lose scroll position when the user rotates the device or unfolds\na foldable phone, which forces the user to scroll again from the top of the\n`WebView` to the previous scroll position.\n\n`WebView` is good at managing its state. You can take advantage of this quality\nby managing as many configuration changes as possible to minimize the number of\ntimes a `WebView` is recreated. Your app should handle configuration changes\nbecause activity recreation (the system's way of handling configuration\nchanges) recreates the `WebView`, which causes the `WebView` to lose state.\n\nManage state\n------------\n\nAvoid [`Activity`](/reference/kotlin/android/app/Activity) recreation as much as\npossible during configuration changes, and let the `WebView` invalidate so it\ncan resize while retaining its state.\n\nTo manage `WebView` state:\n\n- Declare configuration changes handled by your app\n- Invalidate the `WebView` state\n\n#### 1. Add configuration changes to your app's `AndroidManifest.xml` file\n\nAvoid activity recreation by specifying the configuration changes handled by\nyour app (rather than by the system): \n\n \u003cactivity\n android:name=\".MyActivity\"\n android:configChanges=\"screenLayout|orientation|screenSize\n |keyboard|keyboardHidden|smallestScreenSize\" /\u003e\n\n| **Note:** While this nonexhaustive list of configuration changes might be okay for many applications, make sure to manage the configuration changes that make the most sense for your case based on how your users interact with the app, for how long, and when. To find the best combination of configurations for your app, see [`android:configChanges`](/guide/topics/manifest/activity-element#config).\n\n#### 2. Invalidate `WebView` whenever your app receives a configuration change\n\n### Kotlin\n\n```kotlin\noverride fun onConfigurationChanged(newConfig: Configuration) {\n super.onConfigurationChanged(newConfig)\n webView.invalidate()\n}\n```\n\n### Java\n\n```java\n@Override\npublic void onConfigurationChanged(@NonNull Configuration newConfig) {\n super.onConfigurationChanged(newConfig);\n webview.invalidate();\n}\n```\n\nThis step applies only to the view system, as Jetpack Compose does not need to\ninvalidate anything to resize\n[`Composable`](/reference/kotlin/androidx/compose/runtime/Composable) elements\ncorrectly. However, Compose recreates a `WebView` often if not managed\ncorrectly.\n\nKey points\n----------\n\n- [`android:configChanges`](/guide/topics/manifest/activity-element#config): Attribute of the manifest `\u003cactivity\u003e` element. Lists the configuration changes handled by the activity.\n- [`View#invalidate()`](/reference/kotlin/android/view/View#invalidate_2): Method that causes a view to be redrawn. Inherited by `WebView`.\n\nResults\n-------\n\nYour app's `WebView` components now retain their state and scroll position\nacross multiple configuration changes, from resizing to orientation changes\nto device folding and unfolding.\n\nCollections that contain this guide\n-----------------------------------\n\nThis guide is part of these curated Quick Guide collections that cover\nbroader Android development goals: \n\n### Optimize for large screens\n\nEnable your app to support an optimized user experience on tablets, foldables, and ChromeOS devices. \n[Quick guide collection](/quick-guides/collections/optimize-for-large-screens) \n\nHave questions or feedback\n--------------------------\n\nGo to our frequently asked questions page and learn about quick guides or reach out and let us know your thoughts. \n[Go to FAQ](/quick-guides/faq) [Leave feedback](https://issuetracker.google.com/issues/new?component=1573691&template=1993320)"]]