Zasób układu

Zasób układu określa architekturę interfejsu w elemencie Activity lub jego komponent.

lokalizacja pliku:
res/layout/filename.xml
Jako identyfikator zasobu jest używana nazwa pliku.
typ danych skompilowanych zasobów:
Wskaźnik zasobu do zasobu View (lub podklasy)
odniesienie do zasobów:
W Javie: R.layout.filename
W pliku XML: @[package:]layout/filename
składnia:
<?xml version="1.0" encoding="utf-8"?>
<ViewGroup
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@[+][package:]id/resource_name"
    android:layout_height=["dimension" | "match_parent" | "wrap_content"]
    android:layout_width=["dimension" | "match_parent" | "wrap_content"]
    [ViewGroup-specific attributes] >
    <View
        android:id="@[+][package:]id/resource_name"
        android:layout_height=["dimension" | "match_parent" | "wrap_content"]
        android:layout_width=["dimension" | "match_parent" | "wrap_content"]
        [View-specific attributes] >
        <requestFocus/>
    </View>
    <ViewGroup >
        <View />
    </ViewGroup>
    <include layout="@layout/layout_resource"/>
</ViewGroup>

Uwaga: elementem głównym może być element ViewGroup, View lub <merge>, ale może on zawierać tylko 1 element główny i musi zawierać atrybut xmlns:android z przestrzenią nazw android, tak jak w poprzednim przykładzie składni.

elementy:
<ViewGroup>
Kontener na inne elementy View. Jest wiele różnych rodzajów obiektów ViewGroup, a każdy pozwala określić układ elementów podrzędnych na różne sposoby. Różne rodzaje obiektów ViewGroup to LinearLayout, RelativeLayout i FrameLayout.

Nie zakładaj, że żadne pochodne elementu ViewGroup akceptują widoki zagnieżdżone. Niektóre grupy widoków danych są wdrożeniami klasy AdapterView, która określa jej elementy podrzędne tylko na podstawie klasy Adapter.

Atrybuty:

android:id
Identyfikator zasobu. Unikalna nazwa zasobu elementu, która umożliwia uzyskanie z aplikacji odniesienia do ViewGroup. Więcej informacji znajdziesz w sekcji Wartość parametru android:id.
android:layout_height
Wymiar lub słowo kluczowe. Wymagany. Wysokość grupy jako wartość wymiaru (lub zasób wymiaru) albo słowo kluczowe ("match_parent" lub "wrap_content"). Więcej informacji znajdziesz w sekcji Wartości atrybutów android:layout_height i android:layout_width.
android:layout_width
Wymiar lub słowo kluczowe. Wymagany. Szerokość grupy jako wartość wymiaru (lub zasób wymiaru) albo słowo kluczowe ("match_parent" lub "wrap_content"). Więcej informacji znajdziesz w sekcji Wartości atrybutów android:layout_height i android:layout_width.

Klasa podstawowa ViewGroup obsługuje więcej atrybutów, a każda implementacja ViewGroup obsługuje jeszcze wiele innych. Informacje o wszystkich dostępnych atrybutach znajdziesz w dokumentacji dotyczącej klasy ViewGroup, np. w atrybutach XML LinearLayout.

<View>
Indywidualny komponent interfejsu, ogólnie nazywany widżetem. Różne rodzaje obiektów View to TextView, Button i CheckBox.

Atrybuty:

android:id
Identyfikator zasobu. Unikalna nazwa zasobu dla elementu, która umożliwia uzyskanie odniesienia do View z aplikacji. Więcej informacji znajdziesz w sekcji Wartość parametru android:id.
android:layout_height
Wymiar lub słowo kluczowe. Wymagany. Wysokość elementu jako wartość wymiaru (lub zasób wymiaru) albo słowo kluczowe ("match_parent" lub "wrap_content"). Więcej informacji znajdziesz w sekcji Wartości atrybutów android:layout_height i android:layout_width.
android:layout_width
Wymiar lub słowo kluczowe. Wymagany. Szerokość elementu w postaci wartości wymiaru (lub zasobu wymiaru) albo słowa kluczowego ("match_parent" lub "wrap_content"). Więcej informacji znajdziesz w sekcji Wartości atrybutów android:layout_height i android:layout_width.

Klasa podstawowa View obsługuje więcej atrybutów, a każda implementacja View obsługuje jeszcze wiele innych. Więcej informacji znajdziesz w sekcji Układy. Dokumentacja wszystkich dostępnych atrybutów znajdziesz w dokumentacji referencyjnej, np. w atrybutach XML TextView.

<requestFocus>
Każdy element reprezentujący obiekt View może zawierać ten pusty element, dzięki czemu obiekt nadrzędny na pierwszym planie pojawia się na ekranie. W jednym pliku możesz mieć tylko jeden z tych elementów.
<include>
Zawiera plik układu do tego układu.

Atrybuty:

layout
Zasób Układ. Wymagany. odwołanie do zasobu układu,
android:id
Identyfikator zasobu. Zastępuje identyfikator podany do widoku głównego w uwzględnionym układzie.
android:layout_height
Wymiar lub słowo kluczowe. Zastępuje wysokość podaną w widoku głównym w uwzględnionym układzie. Ma zastosowanie tylko wtedy, gdy zadeklarowano również właściwość android:layout_width.
android:layout_width
Wymiar lub słowo kluczowe. Zastępuje szerokość przypisaną do widoku głównego w uwzględnionym układzie. Ma zastosowanie tylko wtedy, gdy zadeklarowano również właściwość android:layout_height.

W elemencie <include> możesz uwzględnić dowolne inne atrybuty układu, które są obsługiwane przez element główny w uwzględnionym układzie. Zastępują one atrybuty zdefiniowane w elemencie głównym.

Uwaga: jeśli chcesz zastąpić atrybuty układu za pomocą tagu <include>, musisz zastąpić zarówno atrybuty android:layout_height, jak i android:layout_width, aby działały inne atrybuty układu.

Innym sposobem na uwzględnienie układu jest użycie ViewStub – lekkiego widoku, który nie zajmuje miejsca, dopóki go nie zwiększysz. Będzie on wtedy zawierał plik układu zdefiniowany przez atrybut android:layout. Więcej informacji o korzystaniu z ViewStub znajdziesz w artykule Wczytywanie widoków na żądanie.

<merge>
Alternatywny element główny, który nie jest narysowany w hierarchii układu. Używanie go jako elementu głównego jest przydatne, gdy wiesz, że ten układ jest umieszczony w układzie, który zawiera już odpowiedni element nadrzędny View do przechowywania elementów podrzędnych elementu <merge>.

Jest to szczególnie przydatne, gdy chcesz uwzględnić ten układ w innym pliku układu za pomocą <include> i nie wymaga on innego kontenera ViewGroup. Więcej informacji o scalaniu układów znajdziesz w artykule Ponowne używanie układów z elementem <include>.

Wartość parametru android:id

W przypadku wartości identyfikatora zwykle używa się takiej składni: "@+id/name", jak pokazano w tym przykładzie. Symbol plusa (+) wskazuje, że jest to nowy identyfikator zasobu, a narzędzie aapt tworzy nową liczbę całkowitą zasobu w klasie R.java, jeśli jeszcze nie istnieje.

<TextView android:id="@+id/nameTextbox"/>

Nazwa elementu nameTextbox jest teraz identyfikatorem zasobu dołączonym do tego elementu. Możesz wtedy odwołać się do elementu TextView, z którym identyfikator jest powiązany w Javie:

Kotlin

val textView: TextView? = findViewById(R.id.nameTextbox)

Java

TextView textView = findViewById(R.id.nameTextbox);

Ten kod zwraca obiekt TextView.

Jeśli jednak masz już zdefiniowany zasób identyfikatora i nie jest on jeszcze używany, możesz go zastosować do elementu View, wykluczając symbol plusa w wartości android:id.

Wartości android:layout_height i android:layout_width

Wartości wysokości i szerokości są wyrażane w dowolnej jednostce wymiarów obsługiwanych przez Androida (px, dp, sp, pt, in, mm) lub za pomocą tych słów kluczowych:

WartośćOpis
match_parent Ustawia wymiar w taki sposób, by pasował do elementu nadrzędnego. Dodano w interfejsie API na poziomie 8 w celu wycofania fill_parent.
wrap_content Ustawia wymiar tylko na potrzeby dopasowania do treści tego elementu.

Elementy widoku niestandardowego

Możesz tworzyć niestandardowe elementy View i ViewGroup oraz stosować je do swojego układu tak samo jak w przypadku standardowego elementu. Możesz też określić atrybuty obsługiwane w elemencie XML. Więcej informacji znajdziesz w artykule o tworzeniu komponentów widoku niestandardowego.

przykład:
Plik XML zapisany o res/layout/main_activity.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, I am a Button" />
</LinearLayout>

Ten kod aplikacji wczytuje układ elementu Activity w metodzie onCreate():

Kotlin

public override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
}

Java

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
}
zobacz też: