a LayoutInflater | Android működése

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:

bontsa le

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:

  1. ha van egy szülője, amelyet át kell adnia a gyökér Nézetcsoport paraméternek, tegye meg.
  2. próbálja meg elkerülni a null megadását a gyökér Nézetcsoport számára.
  3. 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.
  4. nem adja meg a true értéket olyan nézet esetében, amely már hozzá van csatolva egy Nézetcsoporthoz.
  5. 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.

You might also like

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.