تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
WebView هو مكوّن مستخدم بشكل شائع ويقدّم نظامًا متقدّمًا لإدارة الحالات. يجب أن يحافظ WebView
على حالته وموضع التمرير أثناء تغييرات الضبط. يمكن أن يفقد
WebView موضع التمرير عندما يدير المستخدم الجهاز أو يفك شاشة
هاتف قابل للطي، ما يجبر المستخدم على التمرير مرة أخرى من أعلى
WebView إلى موضع التمرير السابق.
يُجيد تطبيق WebView إدارة حالته. يمكنك الاستفادة من هذه الميزة
من خلال إدارة أكبر عدد ممكن من تغييرات الإعدادات للحدّ من عدد المرات التي تتم فيها إعادة إنشاء WebView. يجب أن يعالج تطبيقك تغييرات الضبط
لأنّ إعادة إنشاء النشاط (طريقة النظام في التعامل مع تغييرات الضبط
) تؤدي إلى إعادة إنشاء WebView، ما يؤدي إلى فقدان WebView لحالتها.
إدارة الحالة
تجنَّب إعادة إنشاء Activity قدر الإمكان
أثناء تغييرات الضبط، واترك WebView يبطل حتى تتمكّن
من تغيير حجمه مع الاحتفاظ بحالته.
لإدارة حالة WebView:
الإفصاح عن تغييرات الضبط التي يعالجها تطبيقك
إلغاء صلاحية الحالة WebView
1. إضافة تغييرات الضبط إلى ملف AndroidManifest.xml في تطبيقك
تجنَّب إعادة إنشاء النشاط من خلال تحديد تغييرات الضبط التي يعالجها
تطبيقك (بدلاً من النظام):
لا تسري هذه الخطوة إلا على نظام العرض، لأنّ Jetpack Compose لا يحتاج إلى
إلغاء أي شيء لتغيير حجم عناصر
Composable
بشكل صحيح. ومع ذلك، يعيد تطبيق Compose إنشاء WebView في كثير من الأحيان إذا لم تتم إدارته
بشكل صحيح.
النقاط الرئيسية
android:configChanges: سمة عنصر البيان <activity>. يسرد التغييرات في الإعدادات التي يعالجها النشاط.
View#invalidate(): الطريقة التي تؤدي إلى إعادة رسم طريقة العرض اكتسبها WebView.
النتائج
تحتفظ الآن مكوّنات WebView في تطبيقك بحالتها وموقع التمرير
في جميع التغييرات المتعددة في الإعدادات، بدءًا من تغيير الحجم ووصولاً إلى تغييرات الاتجاه
وعمليات طي الجهاز وفتحه.
المجموعات التي تتضمّن هذا الدليل
هذا الدليل هو جزء من مجموعات الأدلة السريعة المنظَّمة التي تتناول
أهداف تطوير Android الأوسع نطاقًا:
تحسين الأداء على الشاشات الكبيرة
يمكنك إتاحة تطبيقك لتقديم تجربة محسّنة للمستخدمين على الأجهزة اللوحية والأجهزة القابلة للطي وأجهزة ChromeOS.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-02-06 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","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 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],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)"]]