A LayoutInflater XML fájlt vesz be bemenetként, és nézet objektumokat épít belőle. Elég tisztességes megértettük, mi LayoutInflater csinálni.
lássuk, mi Elrendezéskésőbb.az inflate () dokumentum kifejezetten az attachToRoot-ról szól.
logikai: a felfújt hierarchiát csatolni kell-e a gyökérparaméterhez? Ha hamis, akkor a root csak a layoutparams megfelelő Alosztályának létrehozására szolgál az XML gyökér nézetéhez.
az általános elképzelés a következő: ha az attachToRoot értéke true, akkor az első paraméterben megadott elrendezési fájl felfújódik, és a második paraméterben megadott Nézetcsoporthoz kapcsolódik.
ha az attachToRoot értéke false, az első paraméter layout fájlja felfújódik, és nézetként jelenik meg. Azt jelenti, hogy a root csak a LAYOUTPARAMS megfelelő Alosztályának létrehozására szolgál az XML gyökér nézetéhez(az első paraméterhez).
ha igaz értéket ad meg az attachToRoot számára, akkor az elrendezési fájl felfújt nézete közvetlenül a helyszínen kerül a Nézetcsoportba. Ha hamis értéket ad meg az attachToRoot számára, az azt jelenti, hogy az elrendezési fájlból létrehozott nézet valamilyen más módon bekerül a Nézetcsoportba.
bontsuk le két forgatókönyv szerint:
attachToRoot beállítása igaz
- képzelje el, hogy megadtunk egy gombot egy XML elrendezési fájlban, amelynek elrendezési szélessége és elrendezése magassága match_parent.
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/action_attach_to_root_true"
android:id="@+id/button_ok">
</Button>
- most programszerűen szeretnénk hozzáadni ezt a gombot egy tevékenységen belüli LinearLayout-hoz. A LinearLayout tagváltozó szülőnkben egyszerűen hozzáadhatjuk a gombot a következőkkel:
inflater.inflate(R.layout.view_button, mLinearLayout, true);
- meghatároztuk, hogy fel akarjuk fújni a gombot az elrendezési erőforrásfájljából; ezután elmondjuk a LayoutInflater-nek, hogy csatolni akarjuk a szülőhöz. Az elrendezés paramétereit tiszteletben tartjuk, mert tudjuk, hogy a gomb hozzáadódik a LinearLayout-hoz. A gomb elrendezési paramétereinek LinearLayout típusúnak kell lenniük.LayoutParams.
2. attachToRoot beállítása hamis
- vessünk egy pillantást arra, hogy mikor szeretné az attachToRoot értékét hamisra állítani. Ebben az esetben az inflate() első paraméterében megadott nézet ebben az időpontban nem kapcsolódik a második paraméter Nézetcsoportjához. Emlékezzünk a korábbi gomb példánkra, ahol egyéni gombot szeretnénk csatolni egy elrendezési fájlból a szülőhöz. Még mindig csatolhatjuk a gombunkat a szülőhöz, ha hamisat adunk az attachToRoot – hoz-utána csak manuálisan adjuk hozzá.
Button btnAttachToRootFalse = (Button) inflater.inflate(R.layout.view_button,parent,false);
parent.addView(btnAttachToRootFalse);
- A false attachToRoot példa egy kicsit több munkát igényel, amikor manuálisan adjuk hozzá a nézetet egy Nézetcsoporthoz. A gomb hozzáadása a LinearLayout-hoz kényelmesebb volt egy sor kóddal, amikor az attachToRoot igaz volt.
- nézzünk meg néhány forgatókönyvet, amelyek feltétlenül megkövetelik attachToRoot hamisnak lenni. RecyclerView gyermekei kell felfújni attachToRoot át hamis. A gyermek nézeteit felfújják onCreateViewHolder (). A RecyclerViews, nem mi vagyunk felelősek annak meghatározásáért, hogy mikor kell felfújni és bemutatni a gyermek nézeteit. Az attachToRoot paraméternek hamisnak kell lennie, amikor nem vagyunk felelősek azért, hogy nézetet adjunk egy Nézetcsoporthoz.
- van néhány olyan forgatókönyv, amelyben nem lesz gyökér Nézetcsoport, amelyet át kell adni az inflate () függvénybe. Amikor egyéni nézetet hoz létre egy Alertdialoghoz, még nincs hozzáférése a szülőjéhez.
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
LayoutInflater inflater = getActivity().getLayoutInflater();View rootView = inflater.inflate(R.layout.fragment_hello_dialog,null,false);builder.setView(rootView);
builder.setTitle("Alert");
builder.setPositiveButton("Ok", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});return builder.create();
- ebben az esetben rendben van, ha null értéket ad át a gyökér Nézetcsoport számára. Kiderül, hogy a AlertDialog felülírná minden LayoutParams hogy match_parent egyébként. Az általános ökölszabály azonban az, hogy átadja a szülőt, ha képes erre.
tehát összefoglalni:
- ha van egy szülője, amelyet át kell adnia a gyökér Nézetcsoport paraméternek, tegye meg.
- próbálja meg elkerülni a null megadását a gyökér Nézetcsoport számára.
- Pass In false az attachToRoot paraméterhez, ha nem mi vagyunk felelősek az elrendezési fájl nézetének a gyökér Nézetcsoporthoz történő csatolásáért.
- nem adja meg a true értéket olyan nézet esetében, amely már hozzá van csatolva egy Nézetcsoporthoz.
- az Egyéni nézetek jól használhatók az attachToRoot true-jának átadásához.
Külön köszönet Sean Farrel, az ő csodálatos cikket LayoutInflater itt próbáltam összefoglalni néhány szót.
Boldog kódolás és írás a kódolásról!
ha ezt hasznosnak találta, kattintson az alábbi xhamsterre. Kövessen további cikkeket a technológiáról.