LayoutInflater ottaa XML-tiedoston syötteeksi ja rakentaa siitä Näkymäobjekteja. Ymmärsimme, mitä LayoutInflater tekee.
katsotaan, mikä LayoutInflater.inflate () dokumentti sanoo ja erityisesti attachToRoot.
boolean: pitäisikö paisutettu hierarkia liittää juuriparametriin? Jos false, root käytetään vain luoda oikea alaluokka LayoutParams root näkymä XML.
yleinen ajatus on tämä: jos attachToRoot on asetettu true, ensimmäisessä parametrissa määritetty asettelutiedosto täytetään ja liitetään toisessa parametrissa määriteltyyn Katseluryhmään.
kun attachToRoot on epätosi, ensimmäisen parametrin asettelutiedosto paisutetaan ja palautetaan näkymänä. Tarkoittaa root käytetään vain luoda oikea alaluokka LayoutParams root näkymä (ensimmäisen parametrin) XML.
true for attachToRoot johtaa siihen, että asetustiedoston paisutettu näkymä lisätään Katseluryhmään heti paikalla. False for attachToRoot tarkoittaa, että asetustiedostosta luotu näkymä lisätään Katseluryhmään jollain muulla tavalla.
jaetaan se kahteen skenaarioon:
attachToRoot asetettu tosi
- Kuvittele, että määritimme XML-asettelutiedostossa painikkeen, jonka asettelun leveys ja asettelun korkeus on asetettu vastaamaan_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>
- haluamme nyt ohjelmallisesti lisätä tämän painikkeen toimintoon sisältyvään Linearlayoutiin. Meidän LinearLayout jäsen muuttuja vanhempi, voimme yksinkertaisesti lisätä painiketta, jossa on seuraavat:
inflater.inflate(R.layout.view_button, mLinearLayout, true);
- määritimme, että haluamme täyttää painikkeen sen layout resource-tiedostosta; kerromme sitten Layoutinflaterille, että haluamme liittää sen vanhempaan. Asetteluparametrejamme kunnioitetaan, koska tiedämme, että painike lisätään Linearlayoutiin. Painikkeen asettelu params tyyppi olisi LinearLayout.Layoutparamit.
2. attachToRoot asetettu epätosi
- Katsotaanpa, milloin haluat asettaa attachToRoot epätosi. Tässä skenaariossa inflaatin() ensimmäisessä parametrissa määriteltyä näkymää ei tässä vaiheessa liitetä toisen parametrin Näkymäryhmään. Muistele painiketta esimerkki aiemmasta, jossa haluamme liittää mukautetun painikkeen asettelutiedoston vanhempi. Voimme silti liittää meidän painike parent syöttämällä false attachToRoot – me vain manuaalisesti lisätä sen itse jälkeenpäin.
Button btnAttachToRootFalse = (Button) inflater.inflate(R.layout.view_button,parent,false);
parent.addView(btnAttachToRootFalse);
- false attachToRoot-esimerkki vaatii hieman enemmän työtä, kun lisäämme näkymän manuaalisesti Katseluryhmään. Lisäämällä meidän painiketta meidän LinearLayout oli helpompaa yhdellä rivillä koodia, kun attachToRoot oli totta.
- Katsotaanpa joitakin skenaarioita, jotka ehdottomasti vaativat attachtorootin olevan epätosi. RecyclerView ’ n lapset on puhallettava attachToRoot passed in as false. Lapsinäkemyksiä paisutetaan oncreateviewholderissa (). RecyclerViews, ei me, on vastuussa siitä, milloin täyttää ja esittää lapsinäkemyksensä. AttachToRoot-parametrin pitäisi olla väärä aina, kun Emme ole vastuussa näkymän lisäämisestä Katseluryhmään.
- on olemassa muutamia skenaarioita, joissa sinulla ei ole JUURI-Näkymäryhmää, joka siirtyisi inflateen(). Kun luot mukautetun näkymän alertdialogille, et vielä pääse käsiksi sen vanhempaan.
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();
- tässä tapauksessa, se on OK siirtää null root View Groupille. On käynyt ilmi, että AlertDialog ohittaisi kaikki LayoutParams match_parent muutenkin. Yleinen nyrkkisääntö on kuitenkin se, että vanhemmalla menee ohi, jos siihen pystyy.
so to recap:
- jos sinulla on vanhempi, joka siirtyy root ViewGroup-parametriin, tee se.
- yritä välttää Nollaa juurinäkymäryhmässä.
- Pass in false attachToRoot-parametrille, kun emme ole vastuussa asetustiedoston näkymän liittämisestä sen juurinäkymäryhmään.
- älä syötä oikein näkymälle, joka on jo liitetty Näkymäryhmään.
- Custom Views on hyvä käyttötapaus läpäistä tosi attachtorootille.
erityiskiitokset Sean Farrelille, hänen upeasta LayoutInflater-artikkelistaan tässä yritin tiivistää muutaman sanan.
hyvää koodaamista ja kirjoittamista koodaamisesta!
jos tästä oli apua, klikkaa alla olevaa💚. Seuraa minua saadaksesi lisää artikkeleita teknologiasta.