Alternativní zobrazení rozložení
Toto téma vysvětluje, jak můžete rozložení verzí používat kvalifikátory prostředků. Například vytvoření verze rozložení, které se používá pouze v případě, že je zařízení v režimu na šířku a verze rozložení, která je určená jenom pro režim na výšku.
Vytváření alternativních rozložení
Když kliknete na ikonu Alternativní zobrazení rozložení (vlevo od zařízení), otevře se podokno náhledu a zobrazí se seznam alternativních rozložení dostupných v projektu. Pokud neexistují žádná alternativní rozložení, zobrazí se výchozí zobrazení:
Když kliknete na zelené znaménko plus vedle nové verze, otevře se dialogové okno Vytvořit variantu rozložení, abyste mohli vybrat kvalifikátory prostředků pro tuto variantu rozložení:
V následujícím příkladu je kvalifikátor prostředků pro orientaci obrazovky nastaven na Na šířku a velikost obrazovky se změní na Velký. Tím se vytvoří nová verze rozložení s názvem large-land:
Všimněte si, že podokno náhledu na levé straně zobrazuje efekty výběru kvalifikátoru prostředků. Kliknutím na Přidat vytvoříte alternativní rozložení a přepne návrháře na toto rozložení. Podokno náhledu alternativního zobrazení rozložení označuje, které rozložení je načteno do Návrháře pomocí malého pravého ukazatele, jak je znázorněno na následujícím snímku obrazovky:
Úpravy alternativních rozložení
Při vytváření alternativních rozložení je často žádoucí provést jednu změnu, která platí pro všechny forkované verze rozložení. Můžete například chtít změnit text tlačítka na žlutou ve všech rozloženích. Pokud máte velký počet rozložení a potřebujete rozšířit jednu změnu do všech verzí, údržba se může rychle stát těžkopádnou a náchylnou k chybám.
Pro zjednodušení údržby více verzí rozložení poskytuje Návrhář režim více úprav , který rozšíří vaše změny do jednoho nebo více rozložení. Pokud je k dispozici více než jedno rozložení, zobrazí se ikona Více úprav :
Když kliknete na ikonu Více úprav , zobrazí se čáry, které označují, že rozložení jsou propojená (jak je znázorněno níže). To znamená, že když provedete změnu jednoho rozložení, tato změna se rozšíří do všech propojených rozložení. Všechna rozložení můžete zrušit kliknutím na ikonu zakroužkovanou na následujícím snímku obrazovky:
Pokud máte více než dvě rozložení, můžete selektivně přepnout tlačítko pro úpravy vlevo od každého náhledu rozložení a určit, která rozložení jsou propojená. Pokud například chcete provést jednu změnu, která se rozšíří na první a poslední ze tří rozložení, nejprve zrušíte propojení prostředního rozložení, jak je znázorněno tady:
V tomto příkladu se změna výchozího nebo dlouhého rozložení rozšíří do jiného rozložení, ale ne do rozložení s velkou plochou.
Příklad s více úpravami
Obecně platí, že když provedete změnu jednoho rozložení, tato změna se rozšíří do všech ostatních propojených rozložení. Například přidání nového TextView
widgetu do výchozího rozložení a změna textového řetězce tak, aby Portrait
se stejná změna změnila na všechna propojená rozložení. Takto vypadá ve výchozím rozložení:
Přidá TextView
se také do zobrazení rozložení s velkými místy, protože je propojeno s výchozím rozložením:
Ale co když chcete provést změnu, která je místní jenom pro jedno rozložení (to znamená, že nechcete, aby se změna šířila do žádného jiného rozložení)? Chcete-li to provést, musíte zrušit propojení rozložení, které chcete změnit, než ho upravíte, jak je vysvětleno dále.
Provádění místních změn
Předpokládejme, že chceme, aby byla přidána TextView
obě rozložení, ale chceme také změnit textový řetězec ve velkém rozložení na Landscape
místo Portrait
. Pokud tuto změnu provedeme v případě propojení obou rozložení, změna se rozšíří zpět do výchozího rozložení. Proto musíme nejprve zrušit propojení obou rozložení, než provedeme změnu. Když upravíme text ve velkých lokalitách na Landscape
, Návrhář tuto změnu označí červeným rámečkem, který indikuje, že změna je místní pro rozložení velké plochy a není rozšířena zpět do výchozího rozložení:
Když kliknete na výchozí rozložení a zobrazíte ho TextView
, textový řetězec je stále nastavený na Portrait
.
Zpracování konfliktů
Pokud se rozhodnete změnit barvu textu ve výchozím rozložení na zelenou, zobrazí se v propojeném rozložení ikona upozornění. Kliknutím na toto rozložení se otevře rozložení, aby se zobrazil konflikt. Widget, který způsobil konflikt, je zvýrazněný červeným rámečkem a zobrazí se následující zpráva: Nedávné změny způsobily konflikty v tomto alternativním rozložení.
Na pravé straně widgetu se zobrazí pole konfliktu, které vysvětluje konflikt:
V poli konflikt se zobrazí seznam vlastností, které se změnily, a vypíše jejich hodnoty. Kliknutím na Ignorovat konflikt použijete změnu vlastnosti pouze u tohoto widgetu. Kliknutí na Použít použije změnu vlastnosti u tohoto widgetu i u widgetu protějšku v propojeném výchozím rozložení. Pokud se použijí všechny změny vlastností, konflikt se automaticky zahodí.
Zobrazení konfliktů skupin
Změny vlastností nejsou jediným zdrojem konfliktů. Konflikty je možné zjistit při vkládání nebo odebírání widgetů. Pokud je například rozložení velkého území odpojeno od výchozího rozložení a TextView
ve velkém rozložení je přetaženo a vynecháno nad , Button
Návrhář označí přesunutý widget, aby označil konflikt:
Nicméně, neexistuje žádná značka na Button
. I když se pozice změny Button
změnila, Button
nezobrazí se žádné použité změny specifické pro konfiguraci velké země .
CheckBox
Pokud se přidá do výchozího rozložení, vygeneruje se jiný konflikt a nad velkým rozložením se zobrazí ikona upozornění:
Kliknutím na rozložení velké plochy se zobrazí konflikt. Zobrazí se následující zpráva: Nedávné změny způsobily konflikty v tomto alternativním rozložení:
Kromě toho se v poli konfliktu zobrazí následující zpráva:
CheckBox
Přidání příčin konfliktu, protože rozložení s velkou plochou obsahuje změny.LinearLayout
V tomto případě však pole konfliktu zobrazí widget, který byl právě vložen do výchozího rozložení (the CheckBox
).
Pokud kliknete na Ignorovat konflikt, Návrhář konflikt vyřeší a umožní, aby se widget zobrazený v poli konfliktu přetáhl a přetáhl do rozložení, ve kterém widget chybí (v tomto případě rozložení velké plochy ):
Jak je vidět v předchozím příkladu se značkou Button
, nemá červenou značku změny, CheckBox
protože pouze LinearLayout
změny, které byly použity ve velkém rozložení země .
Trvalost konfliktů
Konflikty se v souboru rozložení zachovají jako komentáře XML, jak je znázorněno tady:
<!-- Widget Inserted Conflict | id:__root__ | @+id/checkBox1 -->
Proto při zavření a opětovném otevření projektu budou všechny konflikty stále existovat – i ty, které byly ignorovány.