Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Prawie wszystkie aplikacje systemu Android będą miały w sobie jakieś zasoby; co najmniej mają układy interfejsu użytkownika w postaci plików XML. Po pierwszym utworzeniu aplikacji platformy Xamarin.Android domyślne zasoby są konfigurowane przez szablon projektu Xamarin.Android:
Pięć plików tworzących zasoby domyślne zostały utworzone w folderze Resources:
Icon.png — ikona domyślna aplikacji
Main.axml — domyślny plik układu interfejsu użytkownika dla aplikacji. Należy pamiętać, że podczas gdy system Android używarozszerzenia .xml pliku, platforma Xamarin.Android używa rozszerzenia pliku .axml.
Strings.xml — tabela ciągów, która ułatwia lokalizację aplikacji
AboutResources.txt — nie jest to konieczne i może zostać bezpiecznie usunięte. Zawiera on tylko ogólne omówienie folderu Resources i plików w nim.
Resource.designer.cs — ten plik jest automatycznie generowany i obsługiwany przez platformę Xamarin.Android i przechowuje unikatowy identyfikator przypisany do każdego zasobu. Jest to bardzo podobne i identyczne w celu R.java pliku, który miałby aplikacja systemu Android napisana w języku Java. Jest on tworzony automatycznie przez narzędzia platformy Xamarin.Android i zostanie ponownie wygenerowany od czasu do czasu.
Tworzenie zasobów i uzyskiwanie do ich dostępu
Tworzenie zasobów jest tak proste, jak dodawanie plików do katalogu dla danego typu zasobu. Poniższy zrzut ekranu przedstawia zasoby ciągów dla niemieckich ustawień regionalnych zostały dodane do projektu. Po dodaniu Strings.xml do pliku akcja kompilacji została automatycznie ustawiona na AndroidResource przez narzędzia platformy Xamarin.Android:
Dzięki temu narzędzia platformy Xamarin.Android mogą prawidłowo kompilować i osadzać zasoby w pliku APK. Jeśli z jakiegoś powodu akcja kompilacji nie jest ustawiona na zasób systemu Android, pliki zostaną wykluczone z pakietu APK, a każda próba załadowania lub uzyskania dostępu do zasobów spowoduje błąd czasu wykonywania, a aplikacja ulegnie awarii.
Należy również pamiętać, że chociaż system Android obsługuje tylko małe nazwy plików dla elementów zasobów, platforma Xamarin.Android jest nieco bardziej forgiving; będzie obsługiwać zarówno wielkie, jak i małe nazwy plików. Konwencją nazw obrazów jest użycie małych liter z podkreśleniami jako separatorami (na przykład my_image_name.png). Należy pamiętać, że nazwy zasobów nie mogą być przetwarzane, jeśli łączniki lub spacje są używane jako separatory.
Po dodaniu zasobów do projektu istnieją dwa sposoby ich używania w aplikacji — programowo (wewnątrz kodu) lub z plików XML.
Programowe odwoływanie się do zasobów
Aby uzyskać dostęp do tych plików programowo, są one przypisane unikatowy identyfikator zasobu. Ten identyfikator zasobu jest liczbą całkowitą zdefiniowaną w klasie specjalnej o nazwie Resource
, która znajduje się w pliku Resource.designer.cs i wygląda następująco:
public partial class Resource
{
public partial class Attribute
{
}
public partial class Drawable {
public const int Icon=0x7f020000;
}
public partial class Id
{
public const int Textview=0x7f050000;
}
public partial class Layout
{
public const int Main=0x7f030000;
}
public partial class String
{
public const int App_Name=0x7f040001;
public const int Hello=0x7f040000;
}
}
Każdy identyfikator zasobu jest zawarty w zagnieżdżonej klasie, która odpowiada typowi zasobu. Na przykład gdy plik Icon.png został dodany do projektu, Xamarin.Android zaktualizował Resource
klasę, tworząc klasę zagnieżdżona o nazwie Drawable
ze stałą o nazwie Icon
.
Dzięki temu plik Icon.png może być określany w kodzie jako Resource.Drawable.Icon
. Klasa Resource
nie powinna być edytowana ręcznie, ponieważ wszelkie zmiany wprowadzone w niej zostaną zastąpione przez platformę Xamarin.Android.
W przypadku programowego odwoływania się do zasobów (w kodzie) można uzyskać do nich dostęp za pośrednictwem hierarchii klas Resources, która używa następującej składni:
[<PackageName>.]Resource.<ResourceType>.<ResourceName>
PackageName — pakiet dostarczający zasób i jest wymagany tylko wtedy, gdy są używane zasoby z innych pakietów.
ResourceType — jest to zagnieżdżony typ zasobu, który znajduje się w klasie Resource opisanej powyżej.
Nazwa zasobu — jest to nazwa pliku zasobu (bez rozszerzenia) lub wartość atrybutu android:name dla zasobów, które znajdują się w elemecie XML.
Odwoływanie się do zasobów z pliku XML
Zasoby w pliku XML są dostępne za pomocą następującej specjalnej składni:
@[<PackageName>:]<ResourceType>/<ResourceName>
PackageName — pakiet dostarczający zasób i jest wymagany tylko wtedy, gdy są używane zasoby z innych pakietów.
ResourceType — jest to typ zasobu zagnieżdżonego, który znajduje się w klasie Resource.
Nazwa zasobu — jest to nazwa pliku zasobu (bez rozszerzenia typu pliku) lub wartość atrybutu
android:name
dla zasobów, które znajdują się w elemecie XML.
Na przykład zawartość pliku układu Main.axml jest następująca:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView android:id="@+id/myImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/flag" />
</LinearLayout>
Ten przykład zawiera element ImageView
, który wymaga zasobu możliwego do rysowania o nazwie flaga. Właściwość ImageView
ma swój src
atrybut ustawiony na @drawable/flag
wartość . Po uruchomieniu działania system Android będzie wyglądał wewnątrz katalogu Resource/Drawable dla pliku o nazwie flag.png (rozszerzenie pliku może być innym formatem obrazu, takim jak flag.jpg) i załadować ten plik i wyświetlić go w ImageView
pliku .
Po uruchomieniu tej aplikacji będzie ona wyglądać podobnie do poniższej ilustracji: