práce LayoutInflater / Android

LayoutInflater bere XML soubor jako vstup a staví zobrazení objektů z něj. Fér jsme pochopili, co LayoutInflater dělat.

podívejme se, jaké Vrstvypozději.nafouknout () dokument říká a speciálně o attachToRoot.

boolean: zda má být nahuštěná hierarchie připojena ke kořenovému parametru? Pokud je false, root se používá pouze k vytvoření správné podtřídy LayoutParams pro zobrazení root v XML.

hlavní myšlenka je tato: Pokud attachToRoot je nastavena na hodnotu true, pak rozložení souboru uvedeného v prvním parametru je nafouknuté a připojí se k ViewGroup uvedené v druhém parametru.

pokud je attachToRoot nepravdivý, soubor rozvržení z prvního parametru se nafoukne a vrátí jako pohled. Znamená root se používá pouze k vytvoření správné podtřídy LayoutParams pro zobrazení root (prvního parametru) v XML.

předání true pro attachToRoot má za následek nahuštěné zobrazení souboru rozvržení, které je přidáno do ViewGroup přímo na místě. Předání false pro attachToRoot znamená, že pohled vytvořený ze souboru rozvržení bude přidán do ViewGroup jiným způsobem.

Pojďme si rozebrat to ve dvou scénářích:

zlomit to dolů

attachToRoot Nastavena na hodnotu True

  • Představte si, že jsme zadali tlačítka v rozvržení XML soubor s jeho rozložení šířka a výška rozložení nastavena na 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>
  • nyní chceme programově přidat toto tlačítko do LinearLayout uvnitř aktivity. V naší LinearLayout členské proměnné rodič, můžeme jednoduše přidat tlačítko s následující:
inflater.inflate(R.layout.view_button, mLinearLayout, true);
  • uvedli Jsme, že chceme, aby nafouknout Tlačítko z jeho uspořádání resource file, pak jsme říct LayoutInflater, že se chceme připojit k mateřské. Naše parametry rozvržení jsou poctěny, protože víme, že tlačítko bude přidáno do LinearLayout. Typ rozložení tlačítka params by měl být LinearLayout.LayoutParams.

2. attachToRoot nastaven na False

  • pojďme se podívat na to, kdy chcete nastavit attachToRoot na false. V tomto scénáři není pohled uvedený v prvním parametru inflate () připojen k ViewGroup ve druhém parametru v tomto okamžiku. Připomeňme si náš příklad tlačítka z dřívějšího, kde chceme připojit vlastní tlačítko ze souboru rozvržení k rodiči. Stále můžeme připojit naše tlačítko k rodiči předáním false pro attachToRoot-poté jej sami ručně přidáme.
Button btnAttachToRootFalse = (Button) inflater.inflate(R.layout.view_button,parent,false);
parent.addView(btnAttachToRootFalse);
  • příklad falešného attachtorootu vyžaduje trochu více práce, když ručně přidáme pohled do ViewGroup. Přidání našeho tlačítka do našeho LinearLayout bylo pohodlnější s jedním řádkem kódu, když byla attachToRoot pravdivá.
  • podívejme se na některé scénáře, které absolutně vyžadují, aby attachToRoot byl nepravdivý. RecyclerView děti by měly být nafouknuty attachToRoot předány jako falešné. Dětské pohledy jsou nahuštěny v onCreateViewHolder (). RecyclerViews, ne my, jsou zodpovědní za určení, kdy nafouknout a prezentovat své dětské názory. Parametr attachToRoot by měl být nepravdivý, kdykoli nejsme zodpovědní za přidání pohledu do ViewGroup.
  • Existuje několik scénářů, ve kterých nebudete mít root ViewGroup projít do inflate(). Při vytváření vlastního zobrazení pro AlertDialog ještě nemáte přístup k jeho rodiči.
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();
  • v tomto případě je v pořádku předat null pro root ViewGroup. Ukázalo se, že AlertDialog by stejně přepsal všechny LayoutParams na match_parent. Obecným pravidlem je však předat rodiči, pokud to dokážete.

takže shrnout:

  1. pokud máte rodiče, který má přejít do parametru root ViewGroup, udělejte to.
  2. zkuste se vyhnout předávání null pro root ViewGroup.
  3. zadejte false pro parametr attachToRoot, pokud nejsme zodpovědní za připojení pohledu našeho souboru rozvržení k jeho kořenové skupině Zobrazení.
  4. nepřecházejte true pro zobrazení, které již bylo připojeno k ViewGroup.
  5. vlastní pohledy jsou dobrým případem použití pro předání true pro attachToRoot.

Zvláštní poděkování Sean Farrel, o jeho nádherné článku o LayoutInflater zde jsem se snažil shrnout v několika málo slov.

šťastné kódování a psaní o kódování!
pokud vám to přijde užitečné, klikněte na 💚 níže. Následujte mě pro více článků o technologii.

You might also like

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.