Wariant określa konkretny stan wizualny panelu, dzięki czemu jeden panel może mieć kilka różnych reprezentacji wizualnych, np. stan otwarty lub zamknięty. Aby skonfigurować wariant, użyj kodu XML. Użyj
tagu podrzędnego w elemencie <Panel>.
Każdy tag <Variant> ma obowiązkowy atry1but id, który umożliwia jego jednoznaczną identyfikację.
Tag może też odwoływać się do wariantu nadrzędnego, aby dziedziczyć właściwości. Ten mechanizm dziedziczenia umożliwia efektywne definiowanie wspólnych właściwości w wielu wariantach.
Atrybuty XML
Aby zdefiniować stany i przejścia, użyj tych atrybutów z <TaskPanel> lub
<DecorPanel> tagiem.
| Atrybut | Stan | Opis |
|---|---|---|
id |
Obowiązkowe | Unikalny identyfikator wariantu. Ten identyfikator służy do odwoływania się do
wariantu w przejściach lub jako defaultVariant dla panelu.
|
parent |
Opcjonalnie | Określa identyfikator innego wariantu, z którego bieżący wariant ma dziedziczyć właściwości. Jeśli właściwość nie jest wyraźnie zdefiniowana w bieżącym wariancie, przyjmuje wartość zdefiniowaną w jego wariancie nadrzędnym. |
Elementy podrzędne XML
Użyj tych opcjonalnych elementów, aby określić cechy wizualne panelu, gdy jest on w stanie tego wariantu.
| Element podrzędny | Opis |
|---|---|
<Visibility> |
Określa, czy panel jest widoczny czy ukryty, i zawiera atrybut
isVisible (wartość logiczna). |
<Alpha> |
Określa poziom przezroczystości panelu; zawiera
alpha atrybut (liczba zmiennoprzecinkowa, od 0,0 do 1,0). |
<Layer> |
Ustawia kolejność wyświetlania panelu względem innych paneli; zawiera atrybut
layer (liczba całkowita). Wyższe wartości są rysowane na wierzchu. |
<Focus> |
Określa, czy panel może uzyskać fokus podczas przejścia; zawiera
atrybut onTransition (wartość logiczna).
|
<Bounds> |
Określa prostokątny obszar (położenie i rozmiar) panelu na ekranie. Ten obszar jest kontrolowany przez atrybuty takie jak left, top, bottom, width i height.
W przypadku używania procentów możesz użyć atrybutów przesunięcia, aby zastosować stałe
korekty do granic opartych na procentach –
Aby na przykład określić, że panel ma zajmować 100% wysokości ekranu, z wyłączeniem paska nawigacyjnego o stałej wysokości u dołu, ustaw wysokość na 100%, a |
<SafeBounds> |
Określa bezpieczny obszar w granicach panelu, który nie jest nakładany
przez wycięcia ani wcięcia wyświetlacza, aby podkreślić zgodność z aplikacjami rysowanymi
w tym obszarze. Jego atrybuty są podobne do <Bounds>.
|
<Corner> |
Określa promień narożników panelu, umożliwiając zaokrąglone narożniki, i zawiera atrybut radius (liczba całkowita). Domyślnie narożnik jest ostry i nie trzeba go definiować. |
<Insets> |
Określa wcięcia (dopełnienie) panelu. Zawiera atrybuty left, top, right i bottom. Te wcięcia są zgłaszane aplikacjom uruchamianym w panelu.
|
<Background> |
Wprowadza opcjonalny panel dekoracyjny w tle, aby zapobiec efektom przezroczystości podczas przełączania aplikacji. Określa właściwości takie jak kolor i alfa dla tej warstwy dekoracyjnej. Właściwości warstwy dekoracyjnej, takie jak granice i warstwa, domyślnie przyjmują właściwości wariantu, jeśli nie zostały jeszcze ustawione. |
Przykładowy kod
<Variant id="@id/opened">
<Visibility isVisible="true"/>
<Bounds left="0dp"
top="0dp"
right="100%"
bottom="100%"
bottomOffset="100dp"/>
<Alpha value="1.0"/>
<Layer value="10"/>
<Focus onTransition="true"/>
<Corner radius="24dp"/>
<Insets left="16dp" top="0dp" right="16dp" bottom="48dp"/>
<Background color="@color/app_background" alpha="0.9"/>
</Variant>
Interpolowanie właściwości wizualnych
Aby interpolować właściwości wizualne, użyj KeyFrameVariant. To specjalne rozszerzenie variant jest oparte na ciągłej wartości ułamkowej (od 0 do 1), która umożliwia płynne, dynamiczne przejścia sterowane ciągłym wejściem, np. operacją przeciągania, gdy stan panelu dynamicznie zmienia się wraz z ilością przeciągnięcia.
Atrybuty XML
KeyFrameVariant nie ma atrybutów. Tag <KeyFrameVariant> zawiera
informacje potrzebne do zdefiniowania KeyFrameVariant.
Elementy podrzędne XML
KeyFrameVariant zawiera co najmniej 1 tag podrzędny <KeyFrame>. Każdy
<KeyFrame> ma atrybut framePosition (0–100) i odwołuje się do atrybutu wariantu (identyfikatora innego wariantu). Te keyframes określają stan panelu w określonych punktach ciągłego przejścia.
Przykładowy kod
<KeyFrameVariant id="@id/panel_resizing">
<KeyFrame framePosition="0" variant="@id/minimized"/>
<KeyFrame framePosition="75" variant="@id/opened"/>
<KeyFrame framePosition="100" variant="@id/expanded"/>
</KeyFrameVariant>