Bazen düzeniniz, nadiren kullanılan karmaşık görünümler gerektirir. Yoksa öğe ayrıntıları, ilerleme göstergeleri veya iletileri geri almaksa, görüntüleme işlemlerini yalnızca hızlı bir şekilde gerçekleştirildiğinde gerekir.
Uygulamanızın yalnızca görüntülenebileceği karmaşık görünümlere sahip olduğu
tanımlayarak gelecekte ihtiyaç duyabileceği
Şunun için ViewStub:
nadiren kullanılan görünümlerdir.
ViewStub Tanımlama
ViewStub, şunu yapmayan boyut içermeyen basit bir görünümdür:
bir şeyler çizebilir veya düzene katılabilir. Bu nedenle, az sayıda kaynak gerektiriyor
bir görünüm hiyerarşisinde
bırakın. Her ViewStub şunları içerir:
android:layout özelliğini kullanabilirsiniz.
Sitenizin kullanıcı yolculuğunda daha sonra yüklemek istediğiniz bir düzeniniz olduğunu varsayalım. uygulama:
<?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>
Aşağıdaki ViewStub öğesini kullanarak yüklemeyi erteleyebilirsiniz. Şunun için:
herhangi bir şey gösteriyorsa veya yüklediğinde yönlendirme yapılan düzeni göstermesi gerekir:
<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 düzenini yükleme
Önceki bölümdeki kod snippet'leri şekil gibi bir şey oluşturur. 1:
ViewStub
ağır düzeni gizler.ViewStub tarafından belirtilen düzeni yüklemek istediğinizde,
öğesini çağırarak görünür olarak ayarlayabilirsiniz
setVisibility(View.VISIBLE)
veya şu numarayı arayın:
inflate().
Aşağıdaki kod snippet'i, ertelenen bir yüklemeyi simüle eder. Ekran şu şekilde yüklenir:
Activity ve onCreate() arasında her zamanki gibi
heavy_layout_we_want_to_postpone düzeni:
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 öğesi, görünür olduğunda veya şişirildiğinde artık yer almaz
hiyerarşik olarak düzenlenmiştir. Bunun yerine, şişirilmiş düzen ve
bu düzenin kök görünümü, android:inflatedId tarafından belirtilir
özelliği için ViewStub kullanılabilir. android:id kimliği belirtildi
ViewStub için geçerli yalnızca ViewStub
olduğundan emin olun.
Bu konu hakkında daha fazla bilgi için blog yayınına bakın Optimize edin koçlukla.