يتطلب التخطيط أحيانًا طرق عرض معقدة نادرًا ما يتم استخدامها. وسواء كانت تفاصيل العناصر أو مؤشرات التقدم أو رسائل تراجع عن الرسائل، يمكنك تقليل استخدام الذاكرة وتسريع العرض عن طريق تحميل المشاهدات عند الحاجة إليها فقط.
يمكنك تأجيل تحميل الموارد عندما يكون لديك طرق عرض معقدة يحتاجها التطبيق
في المستقبل من خلال تحديد
ViewStub
لطرق العرض المعقدة والتي لا يتم استخدامها إلا نادرًا.
تحديد ViewStub
ViewStub
عبارة عن طريقة عرض خفيفة بدون أي بُعد لا ترسم أي شيء أو تشارك في التنسيق. وبالتالي، يتطلب الأمر القليل من الموارد
للتضخيم والترك في التسلسل الهرمي لطريقة العرض. يتضمّن كل ViewStub
السمة android:layout
لتحديد التنسيق المطلوب تضخيمه.
لنفترض أن لديك تنسيقًا تريد تحميله لاحقًا في رحلة المستخدم لتطبيقك:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:src="@drawable/logo" android:layout_width="match_parent" android:layout_height="match_parent"/> </FrameLayout>
يمكنك تأجيل التحميل باستخدام ViewStub
التالية. لإظهار أو تحميل أي شيء، يجب أن تجعله يُظهر التخطيط المشار إليه:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent"> <ViewStub android:id="@+id/stub_import" android:inflatedId="@+id/panel_import" android:layout="@layout/heavy_layout_we_want_to_postpone" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" /> </FrameLayout>
تحميل تنسيق ViewStub
تنتج مقتطفات الرمز في القسم السابق شيئًا مثل الشكل 1:
عندما تريد تحميل التنسيق الذي تحدّده ميزة ViewStub
،
يمكنك ضبطه ليكون مرئيًا من خلال استدعاء
setVisibility(View.VISIBLE)
أو الاتصال بـ inflate()
.
يحاكي مقتطف الرمز التالي تحميلاً مؤجَّلًا. يتم تحميل الشاشة كالمعتاد في Activity
وonCreate()
، ثم تعرض تنسيق heavy_layout_we_want_to_postpone
:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_old_xml) Handler(Looper.getMainLooper()) .postDelayed({ findViewById<View>(R.id.stub_import).visibility = View.VISIBLE // Or val importPanel: View = findViewById<ViewStub>(R.id.stub_import).inflate() }, 2000) }
Java
@Override void onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_old_xml); Handler(Looper.getMainLooper()) .postDelayed({ findViewById<View>(R.id.stub_import).visibility = View.VISIBLE // Or val importPanel: View = findViewById<ViewStub>(R.id.stub_import).inflate() }, 2000); }
بعد ظهور العنصر ViewStub
أو تضخيمه، لن يبقى جزءًا من التسلسل الهرمي لطريقة العرض. يتم استبداله بالتنسيق المضخَّم، ويتم تحديد معرّف العرض الجذر لهذا التنسيق من خلال السمة android:inflatedId
في ViewStub
. رقم التعريف android:id
المحدّد لـ ViewStub
صالح فقط إلى أن يصبح تنسيق ViewStub
مرئيًا أو كبيرًا.
لمزيد من المعلومات حول هذا الموضوع، يُرجى الاطّلاع على مشاركة المدوّنة التحسين باستخدام روابط التنويهات الموجزة.