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
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.