Udostępnij za pośrednictwem


Widoki układu alternatywnego

W tym temacie opisano sposób używania układów wersji przy użyciu kwalifikatorów zasobów. Na przykład utworzenie wersji układu, która jest używana tylko wtedy, gdy urządzenie jest w trybie poziomym i wersję układu, która jest dostępna tylko w trybie pionowym.

Tworzenie alternatywnych układów

Po kliknięciu ikony Widok układu alternatywnego (po lewej stronie urządzenia) zostanie otwarte okienko podglądu, aby wyświetlić listę alternatywnych układów dostępnych w projekcie. Jeśli nie ma żadnych układów alternatywnych, zostanie wyświetlony widok domyślny :

Alternate layout view pane

Po kliknięciu zielonego znaku plus obok pozycji Nowa wersja zostanie otwarte okno dialogowe Tworzenie odmiany układu, aby można było wybrać kwalifikatory zasobów dla tej odmiany układu:

Create layout variation

W poniższym przykładzie kwalifikator zasobu orientacjiekranu jest ustawiony na Poziomo, a rozmiar ekranu został zmieniony na Duży. Spowoduje to utworzenie nowej wersji układu o nazwie large-land:

Large-land variation

Zwróć uwagę, że okienko podglądu po lewej stronie wyświetla efekty wyboru kwalifikatora zasobów. Kliknięcie przycisku Dodaj powoduje utworzenie alternatywnego układu i przełączenie Projektant do tego układu. Okienko Podgląd widoku układu alternatywnego wskazuje, który układ jest ładowany do Projektant za pomocą małego prawego wskaźnika, jak pokazano na poniższym zrzucie ekranu:

Loaded layout indicator

Edytowanie alternatywnych układów

Podczas tworzenia układów alternatywnych często pożądane jest wprowadzenie jednej zmiany, która ma zastosowanie do wszystkich rozwidlonych wersji układu. Na przykład możesz zmienić tekst przycisku na żółty we wszystkich układach. Jeśli masz dużą liczbę układów i musisz propagować pojedynczą zmianę do wszystkich wersji, konserwacja może szybko stać się uciążliwa i podatna na błędy.

Aby uprościć konserwację wielu wersji układu, Projektant udostępnia tryb edycji wieloedytowej, który propaguje zmiany w jednym lub kilku układach. Gdy istnieje więcej niż jeden układ, zostanie wyświetlona ikona Wieloedytowa :

Multi-edit icon

Po kliknięciu ikony Wiele edycji zostaną wyświetlone wiersze wskazujące, że układy są połączone (jak pokazano poniżej), czyli po wprowadzeniu zmiany w jednym układzie, ta zmiana jest propagowana do dowolnych połączonych układów. Wszystkie układy można odłączyć, klikając ikonę okręgu wskazaną na poniższym zrzucie ekranu:

Unlink all layouts

Jeśli masz więcej niż dwa układy, możesz selektywnie przełączyć przycisk edycji z lewej strony każdego podglądu układu, aby określić, które układy są połączone ze sobą. Jeśli na przykład chcesz wprowadzić pojedynczą zmianę, która będzie propagowana do pierwszego i ostatniego z trzech układów, najpierw odłączysz układ środkowy, jak pokazano poniżej:

Unlink middle layout

W tym przykładzie zmiana wprowadzona w domyślnym lub długim układzie zostanie rozpropagowana do innego układu, ale nie do układu dużego gruntu.

Przykład z wieloma edycjami

Ogólnie rzecz biorąc, podczas wprowadzania zmiany w jednym układzie ta sama zmiana jest propagowana do wszystkich innych połączonych układów. Na przykład dodanie nowego TextView widżetu do układu domyślnegoi zmiana jego ciągu Portrait tekstowego na spowoduje wprowadzenie tej samej zmiany we wszystkich połączonych układach. Oto jak wygląda w układzie domyślnym:

Add TextView

Element TextView jest również dodawany do widoku układu dużych gruntów, ponieważ jest połączony z układem domyślnym:

Landscape TextView

Ale co zrobić, jeśli chcesz wprowadzić zmianę lokalną tylko w jednym układzie (czyli nie chcesz, aby zmiana została rozpropagowana do żadnego z innych układów)? W tym celu należy odłączyć układ, który chcesz zmienić przed zmodyfikowaniem, zgodnie z wyjaśnieniem w dalszej części.

Wprowadzanie zmian lokalnych

Załóżmy, że oba układy mają zostać dodane TextView, ale chcemy również zmienić ciąg tekstowy w układzie dużych gruntów na Landscape zamiast Portrait. Jeśli wprowadzimy tę zmianę do dużego lądu, gdy oba układy są połączone, zmiana zostanie rozpropagująca z powrotem do układu domyślnego. W związku z tym musimy najpierw odłączyć dwa układy przed wprowadzeniem zmiany. Gdy modyfikujemy tekst w dużych gruntach na Landscape, Projektant oznacza tę zmianę czerwoną ramką, aby wskazać, że zmiana jest lokalna w układzie dużych gruntów i nie jest propagowana z powrotem do układu domyślnego:

Local change

Po kliknięciu układu domyślnego, aby go wyświetlić, ciąg tekstowy TextView jest nadal ustawiony na Portrait.

Obsługa konfliktów

Jeśli zdecydujesz się zmienić kolor tekstu w układzie Domyślny na zielony, zobaczysz ikonę ostrzeżenia wyświetlaną w połączonym układzie. Kliknięcie tego układu powoduje otwarcie układu w celu ujawnienia konfliktu. Widżet, który spowodował konflikt, został wyróżniony czerwoną ramką, a wyświetlany jest następujący komunikat: Ostatnie zmiany spowodowały konflikty w tym alternatywnym układzie.

Conflicting change

Po prawej stronie widżetu po prawej stronie widżetu zostanie wyświetlone pole konfliktu, aby wyjaśnić konflikt:

Conflict warning

W polu konflikt jest wyświetlana lista zmienionych właściwości i lista ich wartości. Kliknięcie pozycji Ignoruj konflikt powoduje zastosowanie zmiany właściwości tylko do tego widżetu. Kliknięcie przycisku Zastosuj spowoduje zastosowanie zmiany właściwości do tego widżetu, a także do odpowiedniego widżetu w połączonym układzie domyślnym . Jeśli zostaną zastosowane wszystkie zmiany właściwości, konflikt zostanie automatycznie odrzucony.

Wyświetlanie konfliktów grup

Zmiany właściwości nie są jedynym źródłem konfliktów. Konflikty można wykryć podczas wstawiania lub usuwania widżetów. Na przykład gdy układ dużych gruntów jest odłączony od układu domyślnego, a TextView w układzie dużych gruntów jest przeciągany i porzucany powyżej Button, Projektant oznacza przeniesiony widżet, aby wskazać konflikt:

View group conflict

Jednak na obiekcie nie ma żadnego znacznika Button. Chociaż pozycja Button obiektu uległa zmianie, Button nie są wyświetlane żadne zastosowane zmiany specyficzne dla konfiguracji dużych gruntów .

Jeśli element CheckBox zostanie dodany do układu domyślnego, zostanie wygenerowany inny konflikt i zostanie wyświetlona ikona ostrzeżenia dla układu dużego lądu:

Checkbox conflict

Kliknięcie układu dużych gruntów ujawnia konflikt. Zostanie wyświetlony następujący komunikat: Ostatnie zmiany spowodowały konflikty w tym alternatywnym układzie:

Alt layout conflict

Ponadto w polu konflikt jest wyświetlany następujący komunikat:

Conflict message

CheckBox Dodanie przyczyn konfliktu, ponieważ układ dużych gruntów zawiera zmiany w LinearLayout obiekcie, który go zawiera. Jednak w tym przypadku pole konfliktu wyświetla widżet, który został właśnie wstawiony do układu domyślnego ().CheckBox

Jeśli klikniesz przycisk Ignoruj konflikt, Projektant rozwiąże konflikt, umożliwiając przeciąganie widżetu w polu konfliktów i upuszczanie go do układu, w którym brakuje widżetu (w tym przypadku układu dużego lądu):

Resolved group conflict

Jak pokazano w poprzednim przykładzie Buttonz elementem , CheckBox nie ma czerwonego znacznika zmian, ponieważ tylko LinearLayout zmiany, które zostały zastosowane w układzie dużych gruntów .

Trwałość konfliktów

Konflikty są utrwalane w pliku układu jako komentarze XML, jak pokazano poniżej:

<!-- Widget Inserted Conflict | id:__root__ | @+id/checkBox1 -->

W związku z tym po zamknięciu i ponownym otwarciu projektu nadal będą istnieć wszystkie konflikty — nawet te, które zostały zignorowane.