Poziom API: 11
Dla programistów platforma Android 3.0
Dokument (HONEYCOMB
) jest dostępny do pobrania
dla pakietu Android SDK. Platforma do pobrania zawiera bibliotekę i system Androida
oraz zestaw skórek emulatora i inne elementy. Platforma do pobrania nie zawiera żadnych zewnętrznych
biblioteki.
Dla programistów platforma Android 3.0 jest dostępna jako dostępny do pobrania komponent Android SDK. Platforma do pobrania zawiera biblioteki Androida i obraz systemu, a także zestaw skórek emulatora i innych. Aby rozpocząć tworzenie lub testowanie aplikacji na Androida 3.0, użyj Menedżera pakietu Android SDK, aby pobrać platformę do swojego pakietu SDK.
Omówienie interfejsu API
W sekcjach poniżej znajdziesz techniczny przegląd nowości dla programistów w Androidzie 3.0, w tym nowe funkcje i zmiany w interfejsie API od poprzedniej wersji.
Fragmenty
Fragment to nowy komponent struktury, który umożliwia rozdzielenie poszczególnych elementów
aktywności w samodzielne moduły, które definiują własny interfejs użytkownika i cykl życia. Aby utworzyć fragment, musisz rozszerzyć klasę Fragment
i zaimplementować kilka metod wywołania zwrotnego cyklu życia, podobnych do metody Activity
. Następnie możesz połączyć kilka fragmentów w jednym działaniu, aby utworzyć interfejs z wieloma panelami, w których każdy panel zarządza własnym cyklem życia i danymi wejściowymi użytkownika.
Fragment możesz też użyć bez udostępniania interfejsu użytkownika, a zamiast tego użyć go jako element roboczy dla aktywności, np. do zarządzania postępem pobierania, który odbywa się tylko podczas wykonywania aktywności.
Dodatkowo:
- Fragmenty są samodzielne i można ich używać w różnych działaniach
- Możesz dodawać, usuwać, zastępować i animować fragmenty w ramach aktywności.
- Możesz dodawać fragmenty do stosu elementów zarządzanego przez aktywność, zachowując stan fragmentów w miarę ich zmiany i pozwalając użytkownikowi na przechodzenie wstecz przez różne stany.
- Przygotowując alternatywne układy, możesz mieszać i dopasowywać fragmenty w zależności od rozmiaru i orientacji ekranu.
- Fragmenty mają bezpośredni dostęp do swojej aktywności w kontenerze i mogą dodawać elementy do paska czynności aktywności (omówionego w następnym punkcie).
Aby zarządzać fragmentami w działalności, musisz użyć interfejsu FragmentManager
, który udostępnia kilka interfejsów API do interakcji z fragmentami, takich jak znajdowanie fragmentów w działalności i wyjmowanie fragmentów ze stosu, aby przywrócić ich poprzedni stan.
Aby wykonać transakcję, np. dodać lub usunąć fragment, musisz utworzyć FragmentTransaction
. Możesz wtedy wywoływać metody, takie jak add()
remove()
lub replace()
. Po zastosowaniu wszystkich
zmiany, które chcesz wykonać dla transakcji, musisz wywołać funkcję commit()
, a system zastosuje transakcję fragment do
aktywność.
Więcej informacji o korzystaniu z fragmentów znajdziesz w dokumentacji dotyczącej fragmentów. Kilka próbki są również dostępne w aplikacji w wersji demonstracyjnej interfejsu API.
Pasek działań
Pasek działań zastępuje tradycyjny pasek tytułu u góry okna aktywności. Zawiera ono logo aplikacji w lewym rogu i nowy interfejs elementów w Menu opcji. Dodatkowo Pasek działań umożliwia:
- Dodawaj elementy menu bezpośrednio na pasku działań jako „czynności”.
W deklaracji XML elementu menu dodaj atrybut
android:showAsAction
o wartości"ifRoom"
. Jeśli wystarczy miejsca, pojawi się bezpośrednio na pasku działań. W przeciwnym razie element zostanie umieszczony w sekcji rozszerzone menu widoczne po prawej stronie paska działań przy użyciu ikony menu. - Zastępowanie działania widżetem (np. polem wyszukiwania) – tworzenie
„widok akcji”.
W deklaracji XML elementu menu dodaj atrybut
android:actionViewLayout
z zasobem układu lub atrybutandroid:actionViewClass
z nazwą klasy widżetu. (Aby produkt został wyświetlony, musisz również zadeklarować atrybutandroid:showAsAction
na pasku działań). Jeśli na pasku działań jest za mało miejsca, a element jest widoczny w działa jak zwykły element menu i nie wyświetla widżetu. - Dodawanie działania do logo aplikacji i zastępowanie go logo niestandardowym
Logo aplikacji jest automatycznie przypisywane do identyfikatora
android.R.id.home
, który system przekazuje do wywołaniaonOptionsItemSelected()
aktywności po jego dotknięciu. Wystarczy odpowiedzieć na ten identyfikator w oddzwonieniu do wykonania działania, np. przejścia do folderu głównego aplikacji działania.Aby zastąpić ikonę logo, określ logo aplikacji w pliku manifestu za pomocą atrybutu
android:logo
, a potem wywołaj funkcjęsetDisplayUseLogoEnabled(true)
w swojej aktywności. - Dodaj menu nawigacyjne, aby przejść wstecz przez tylny stos fragmentów
- Dodaj karty lub listę rozwijaną, aby przechodzić między fragmentami
- Dostosuj pasek działań, dodając motywy i tła
Pasek działań jest standardowy dla wszystkich aplikacji korzystających z nowego holograficznego motywu,
także standardowe po ustawieniu wartości android:minSdkVersion
lub android:targetSdkVersion
na "11"
.
Więcej informacji o pasku działań znajdziesz w dokumentacji tego paska. Kilka przykładów jest też dostępnych w aplikacji Przykłady użycia interfejsu API.
Schowek systemowy
Aplikacje mogą teraz kopiować i wklejać dane (oprócz zwykłego tekstu) do i z całego systemu schowku. Może to być zwykły tekst, identyfikator URI lub intencja.
Zapewniając systemowi dostęp (za pośrednictwem dostawcy treści) do danych, które użytkownik chce skopiować użytkownik może skopiować z aplikacji złożone treści (na przykład obraz lub strukturę danych) wklej go do innej aplikacji, która obsługuje tego typu zawartość.
Aby zacząć korzystać z Schowka, pobierz globalny obiekt ClipboardManager
, wywołując funkcję getSystemService(CLIPBOARD_SERVICE)
.
Aby skopiować element do schowka, musisz utworzyć nowy obiekt ClipData
, który zawiera co najmniej 1 obiekt ClipData.Item
z których każdy opisuje jedną encję. Aby utworzyć obiekt ClipData
zawierający tylko 1 element ClipData.Item
, możesz użyć jednej z metod pomocniczych, takich jak newPlainText()
, newUri()
i newIntent()
, które zwracają obiekt ClipData
z wstępnie załadowanym elementem ClipData.Item
.
Aby dodać element ClipData
do schowka, przekaż go do setPrimaryClip()
w przypadku instancji ClipboardManager
.
Następnie możesz odczytać plik ze schowka (aby go wkleić), wywołując funkcję getPrimaryClip()
na elemencie ClipboardManager
. Obsługa otrzymanych danych ClipData
może być skomplikowana. Zanim spróbujesz je wkleić, musisz się upewnić, że możesz obsługiwać typ danych na komputerze.
W schowku znajduje się tylko jeden element składowych danych (ClipData
obiektu), ale jeden element ClipData
może zawierać wiele obiektów ClipData.Item
.
Więcej informacji znajdziesz w dokumentacji dotyczącej kopiowania i wklejania. Prosty sposób implementacji kopiowania i wklejania znajdziesz również w pokazach demonstracyjnych interfejsów API i bardziej kompleksową implementację znajdziesz w notatniku.
Przeciągnij i upuść
Nowe interfejsy API upraszczają operacje przeciągania i upuszczania w interfejsie aplikacji. Przeciągnięcie
to przesłanie jakiegoś rodzaju danych przechowywanych w ClipData
– z jednego miejsca do drugiego. Punktem początkowym i końcowym operacji przeciągania jest View
, dlatego interfejsy API, które bezpośrednio obsługują operacje przeciągania i upuszczania,
w zajęciach View
.
Przeciąganie i upuszczanie ma cykl życia, który jest zdefiniowany przez kilka działań – każde z nich
zdefiniowane przez obiekt DragEvent
, taki jak ACTION_DRAG_STARTED
, ACTION_DRAG_ENTERED
,
ACTION_DROP
Każdy widok, który chce uczestniczyć w operacji przeciągania, może nasłuchiwać tych działań.
Aby zacząć przeciągać treści w aktywności, wywołaj startDrag()
w View
, tworząc obiekt ClipData
reprezentujący
dane do przeciągnięcia, View.DragShadowBuilder
, aby ułatwić „cień”
którą użytkownicy widzą pod ich palcami podczas przeciągania, a Object
, która umożliwia udostępnianie
informacje o przeciąganym obiekcie z widokami, które mogą go otrzymać.
Aby zaakceptować przeciągany obiekt w View
(otrzymać „upuszczenie”), zarejestruj widok w OnDragListener
, wywołując funkcję setOnDragListener()
. Gdy w widoku wystąpi zdarzenie przeciągnięcia,
system wywołuje metodę onDrag()
, aby uzyskać żądanie OnDragListener
, które otrzymuje DragEvent
opisujący rodzaj przeciągnięcia (np. ACTION_DRAG_STARTED
, ACTION_DRAG_ENTERED
i
ACTION_DROP
). Podczas przeciągania system wielokrotnie wywołuje parametr onDrag()
, aby uzyskać widok pod obszarem przeciągania, aby dostarczyć
strumieni danych. Widok odbierający może zapytać o typ zdarzenia dostarczanego do onDragEvent()
, wywołując funkcję getAction()
w komponencie DragEvent
.
Uwaga: chociaż zdarzenie przeciągania może zawierać obiekt ClipData
, nie jest ono powiązane z systemową skopiowaną zawartością schowka. Przeciąganie i upuszczanie
nie powinna nigdy umieszczać przeciągniętych danych w schowku systemowym.
Więcej informacji znajdziesz w sekcji Przeciąganie i Dokumentacja usuwania. Możesz też zobaczyć sposób przeciągania i upuszczania w Aplikacja API Demos i Honeycomb Gallery aplikacji.
Widżety
Android 3.0 obsługuje kilka nowych klas widżetów, które umożliwiają tworzenie bardziej interaktywnych widżetów aplikacji na ekranie głównym użytkownika. Dotyczy to tych klas: GridView
, ListView
, StackView
, ViewFlipper
i AdapterViewFlipper
.
Co ważniejsze, możesz używać nowych funkcji RemoteViewsService
do tworzenia widżetów aplikacji z kolekcjami, korzystając z widżetów takich jak GridView
, ListView
i StackView
, które są obsługiwane przez dane zdalne, na przykład od dostawcy treści.
Klasa AppWidgetProviderInfo
(zdefiniowana w XML za pomocą elementu <appwidget-provider>
) obsługuje też 2 nowe pola: autoAdvanceViewId
i previewImage
. W polu autoAdvanceViewId
możesz określić identyfikator widoku podrzędnego widżetu aplikacji, który powinien być automatycznie przewijany przez hosta widżetu aplikacji. Pole previewImage
określa podgląd wyglądu widżetu aplikacji i jest wyświetlane użytkownikowi w selektorze widżetów. Jeśli to pole nie jest
zostanie użyta ikona widżetu aplikacji.
Aby ułatwić tworzenie podglądu obrazu widżetu aplikacji (który należy podać w polu previewImage
), emulator Androida zawiera aplikację „Podgląd widżetu”. Aby utworzyć obraz podglądu, uruchom tę aplikację, wybierz widżet aplikacji i skonfiguruj go tak, jak chcesz, aby wyglądał obraz podglądu, a potem zapisz go i umieść w zasobach rysowalnych aplikacji.
Nowe funkcje widżetu aplikacji możesz zobaczyć w aplikacji widżet StackView i widżecie lista pogody.
Powiadomienia na pasku stanu
Interfejsy API Notification
zostały rozszerzone o obsługę treści bogatych w treści
powiadomień na pasku powiadomień, a dodatkowo nowa klasa w Notification.Builder
ułatwiają
Utwórz Notification
obiekty.
Nowe funkcje:
- Obsługa dużej ikony w powiadomieniu (
setLargeIcon()
). Zwykle jest to spowodowane aplikacji społecznościowych do pokazywania zdjęcia osoby, która jest źródłem powiadomienia lub w aplikacjach do multimediów, by wyświetlić miniaturę albumu. - Obsługa układów niestandardowych na pasku stanu paska stanu przy użyciu funkcji
setTicker()
. - Obsługa niestandardowych układów powiadomień, w tym przycisków z elementami
PendingIntent
, które zapewniają bardziej interaktywne widżety. Na przykład plik może sterować odtwarzaniem muzyki bez rozpoczynania aktywności.
Moduły wczytywania treści
Nowe interfejsy API frameworku ułatwiają asynchroniczne wczytywanie danych za pomocą klasy Loader
. Możesz go używać w połączeniu ze składnikami interfejsu użytkownika, takimi jak widoki i fragmenty, aby dynamicznie wczytywać dane z wątków roboczych. Podklasa CursorLoader
została specjalnie zaprojektowana, aby ułatwić Ci to w przypadku danych obsługiwanych przez klasę ContentProvider
.
Wystarczy, że zaimplementujesz interfejs LoaderCallbacks
, aby otrzymywać wywołania zwrotne, gdy zostanie przesłane żądanie utworzenia nowego ładowarki lub gdy zmienią się dane, a potem wywołaj initLoader()
, aby zainicjować ładowarkę dla swojej aktywności lub fragmentu.
Więcej informacji znajdziesz w dokumentacji modułów wczytujących. Możesz też zobaczyć przykładowy kod z wykorzystaniem funkcji wczytujących w klasie LoaderCursor i Przykłady z narzędzia LoaderThrottle.
Interfejsy API Bluetooth A2DP i zestawu słuchawkowego
Android zawiera teraz interfejsy API, które umożliwiają aplikacjom sprawdzanie stanu połączonych urządzeń z profilem A2DP i słuchawek Bluetooth. Aplikacje mogą na przykład wykrywać, czy zestaw słuchawkowy Bluetooth jest podłączone do słuchania muzyki i odpowiednio powiadomić użytkownika. Aplikacje mogą również otrzymywać przesyła komunikaty AT dotyczące konkretnego dostawcy i powiadamia użytkownika o stanie połączenia urządzenia, np. gdy poziom baterii w podłączonym urządzeniu jest słaba.
Możesz zainicjować odpowiednią funkcję BluetoothProfile
, wywołując funkcję getProfileProxy()
z konstantem profilem A2DP
lub HEADSET
oraz BluetoothProfile.ServiceListener
, aby otrzymywać wywołania zwrotne, gdy klient Bluetooth jest połączony lub rozłączony.
Schemat animacji
Zupełnie nowa elastyczna platforma animacji umożliwia animowanie dowolnych właściwości dowolnego obiektu (Widok, rysowalny, Fragment, Obiekt lub cokolwiek innego). Umożliwia on zdefiniowanie kilku aspektów animację, na przykład:
- Czas działania
- Powtarzająca się kwota i zachowanie
- Typ interpolacji czasowej
- Animator ustawia odtwarzanie animacji razem, po kolei lub po określonych opóźnieniach.
- Opóźnienie odświeżania klatki
Te i inne aspekty animacji możesz zdefiniować domyślnie w przypadku wartości int, float i hexadecimalnych wartości kolorów obiektu. Oznacza to, że gdy obiekt ma pole właściwości dla jednego z tych typów,
może zmienić jego wartość z czasem i w ten sposób wpłynąć na animację. Aby animować jakikolwiek inny typ wartości,
system obliczania wartości dla danego typu za pomocą interfejsu TypeEvaluator
.
Do animowania wartości właściwości są 2 animatory: ValueAnimator
i ObjectAnimator
. ValueAnimator
oblicza wartości animacji, ale nie wie, który obiekt lub która właściwość jest animowany. Wykonuje tylko obliczenia, a Ty
nasłuchuj aktualizacji i przetwarzaj dane według własnej logiki. ObjectAnimator
jest podklasą klasy ValueAnimator
i
pozwala ustawić animację obiektu i właściwości oraz obsługiwać całą animację.
Oznacza to, że nadajesz ObjectAnimator
obiektowi animacji,
właściwości obiektu, które zmieniają się z czasem, oraz zbioru wartości, które mają być stosowane do tej właściwości
i rozpoczyna animację.
Dodatkowo klasa LayoutTransition
umożliwia automatyczne stosowanie animacji przejść w przypadku zmian w układzie aktywności. Aby włączyć przejścia dla części
układ, utwórz obiekt LayoutTransition
i włącz go
dowolne ViewGroup
, wywołując setLayoutTransition()
. Powoduje to, że wartość domyślna
animacje są uruchamiane po dodaniu elementów do grupy lub ich usunięciu. Aby określić niestandardowy
animacje, wywołaj setAnimator()
w LayoutTransition
i podaj niestandardowy Animator
,
na przykład ValueAnimator
lub ObjectAnimator
omówiono powyżej.
Więcej informacji znajdziesz w dokumentacji dotyczącej animacji właściwości. Dostępne opcje zapoznaj się też z kilkoma przykładami interfejsów API animacji w interfejsie API aplikacji demonstracyjnej.
Rozszerzony interfejs użytkownika
- Wybór z użyciem siatki w ListView i GridView
Nowy tryb
CHOICE_MODE_MULTIPLE_MODAL
w usłudzesetChoiceMode()
umożliwia użytkownikom wybranie wielu elementów z:ListView
lubGridView
. W połączeniu z paskiem działań użytkownicy mogą wybierać wiele elementów, a potem wybierać działanie do wykonania z listy opcji na pasku działań (który przekształca się w tryb działania z wielokrotnie wybieranymi opcjami).Aby włączyć wybór wielokrotny, zadzwoń pod numer
setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)
i zarejestrujMultiChoiceModeListener
wsetMultiChoiceModeListener()
.Gdy użytkownik przytrzyma dłużej element, pasek działań przełączy się na tryb wielokrotnego wyboru Tryb działania. System powiadamia
MultiChoiceModeListener
o wybraniu elementów, wywołując metodęonItemCheckedStateChanged()
.Przykłady wyboru jednokrotnego wyboru znajdziesz na liście15. kawa w przykładowej aplikacji interfejsu API w wersji demonstracyjnej.
- Nowe interfejsy API do przekształcania widoków
Nowe interfejsy API umożliwiają łatwe stosowanie przekształceń 2D i 3D do widoków w schemacie aktywności. Tworzenie nowych przekształceń jest możliwe dzięki zbiorowi właściwości obiektów, które definiują pozycję układu, orientację, przezroczystość i nie tylko.
Nowe metody konfigurowania właściwości widoku to m.in.
setAlpha()
,setBottom()
,setLeft()
,setRight()
,setBottom()
,setPivotX()
,setPivotY()
,setRotationX()
,setRotationY()
,setScaleX()
,setScaleY()
,setAlpha()
.Niektóre metody mają też odpowiedni atrybut XML, który możesz określić w pliku układu, aby zastosować domyślną transformację. Dostępne atrybuty:
translationX
,translationY
,rotation
,rotationX
,rotationY
,scaleX
,scaleY
,transformPivotX
,transformPivotY
ialpha
.Użycie niektórych z tych nowych właściwości widoku w połączeniu z nową strukturą animacji (opis powyżej), możesz łatwo dodać do widoków fantazyjne animacje. Na przykład, aby obrócić na swojej osi Y, dodaj do elementu
ObjectAnimator
elementView
, wartość „obrótY” oraz wartości początkowej i końcowej:Kotlin
ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply { duration = 2000 start() }
Java
ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360); animator.setDuration(2000); animator.start();
- Nowe motywy holograficzne
Standardowe widżety systemowe i ogólny wygląd zostały przeprojektowane i zawierają nowy motyw interfejsu użytkownika oparty na „holografii”. System stosuje nowy motyw, korzystając ze standardowego systemu stylów i motywów.
Każda aplikacja kierowana na platformę Android 3.0, która ma ustawioną wartość
android:minSdkVersion
lubandroid:targetSdkVersion
równa"11"
, dziedziczy domyślnie motyw holograficzny. Jeśli jednak aplikacja ma też swój własny motyw, zastąpi on motyw holograficzny, chyba że zaktualizujesz style, aby dziedziczyły motyw holograficzny.Aby zastosować motyw holograficzny do poszczególnych aktywności lub odziedziczyć je we własnym motywie definicje, użyj jednej z kilku nowych
Theme.Holo
tematy. Jeśli aplikacja jest zgodna z wersją Androida niższą niż 3.0 i zawiera motywy niestandardowe, wybierz motyw na podstawie wersji platformy. - Nowe widżety
AdapterViewAnimator
Klasa podstawowa dla
AdapterView
, która wykonuje animacje podczas przełączania się między widokami.AdapterViewFlipper
Prosty
ViewAnimator
, który animuje przejścia między co najmniej 2 widokami dodanymi do niego. W danym momencie wyświetlany jest tylko jeden element podrzędny. W razie potrzeby może automatycznie się odwrócić pomiędzy dla każdego elementu podrzędnego w regularnych odstępach.CalendarView
Umożliwia użytkownikom wybieranie dat z kalendarza przez dotknięcie daty oraz przewijanie lub przesuwanie kalendarza do wybranej daty. Możesz skonfigurować zakres dat dostępny w widżecie.
ListPopupWindow
Przypina się do widoku hosta i wyświetla listę opcji, na przykład listę sugestii podczas wpisywania tekstu w widoku
EditText
.NumberPicker
Pozwala użytkownikowi wybrać numer z wstępnie zdefiniowanego zakresu. Widżet podaje dane wejściowe oraz za pomocą przycisków w górę i w dół, aby wybrać cyfrę. Dotknięcie pola wejściowego umożliwia użytkownikowi przewijanie wartości lub ponowne dotknięcie, aby bezpośrednio edytować bieżącą wartość. Umożliwia też pozycje na ciągi, dzięki czemu zamiast indeksu wyświetla się odpowiedni ciąg pozycji.
PopupMenu
Wyświetla
Menu
w wyskakującym okienku modalnym zakotwiczonym w widoku. pojawi się wyskakujące okienko pod widokiem zakotwiczonym, jeśli jest tam miejsce, lub nad nim, jeśli go nie ma. Jeśli edytor IME (miękki) klawiatury) jest widoczne, wyskakujące okienko nie nakłada się na edytor IME, dopóki użytkownik nie dotknie .SearchView
Udostępnia pole wyszukiwania, które można skonfigurować tak, aby zapytania były wyświetlane w określonej grupie aktywność i wyświetlanie sugestii wyszukiwania (w taki sam sposób, jak w przypadku tradycyjnego okna wyszukiwania). Ten widżet jest szczególnie przydatny do udostępniania widżetu wyszukiwania na pasku działań. Więcej informacji znajdziesz w artykule Tworzenie interfejsu wyszukiwania.
StackView
Widok, który wyświetla elementy podrzędne w postaci stosu 3D i pozwala użytkownikom przełączać się między widokami jak w rolce.
Grafika
- Sprzętowa akceleracja grafiki 2D
Teraz możesz włączyć dla swojej aplikacji renderowanie OpenGL, ustawiając wartość
android:hardwareAccelerated="true"
w elemencie<application>
w pliku manifestu lub w przypadku poszczególnych elementów<activity>
.Ta flaga pomaga aplikacjom, ponieważ przyspiesza ich rysowanie. Dzięki temu animacje będą płynniejsze, przewijanie płynniejsze, a ogólna wydajność i reakcje na interakcje użytkowników będą lepsze.
- Pomoc dotycząca sprzętu i oprogramowania
Domyślnie
View
nie ma określonej warstwy. Możesz określić, że parametr może być wspierany przez warstwę sprzętową lub programową, określoną za pomocą wartościLAYER_TYPE_HARDWARE
iLAYER_TYPE_SOFTWARE
, przy użyciusetLayerType()
lublayerType
.Warstwa sprzętowa jest obsługiwana przez specyficzną dla sprzętu teksturę (zwykle obiekty Frame Buffer lub FBO na sprzęcie OpenGL) i powoduje, że widok jest renderowany za pomocą ścieżki sprzętowego renderowania Androida, ale tylko wtedy, gdy akceleracja sprzętowa jest włączona dla hierarchii widoku. Gdy sprzęt akceleracja jest wyłączona, warstwy sprzętowe zachowują się dokładnie tak samo jak warstwy oprogramowania.
Warstwa programowa jest obsługiwana przez mapę bitową i powoduje, że widok jest renderowany za pomocą ścieżki renderowania programowego Androida, nawet jeśli akceleracja sprzętowa jest włączona. Warstwy oprogramowania powinny być w przypadku częstej aktualizacji drzewa widoku, którego dotyczy problem. Każda aktualizacja wymaga ponownego renderowania warstwy oprogramowania, która może być wolna.
Więcej informacji znajdziesz w dokumentacji
LAYER_TYPE_HARDWARE
iLAYER_TYPE_SOFTWARE
. - Silnik graficzny 3D Renderscript
Renderscript to środowisko wykonawcze 3D, które udostępnia zarówno interfejs API do tworzenia scen 3D, jako specjalny, niezależny od platformy język do cieniowania, który zapewnia maksymalną wydajność. Dzięki Renderscript może przyspieszyć przetwarzanie danych i obsługę grafiki. Renderowanie to idealny sposób wysokiej jakości efekty 3D w aplikacjach, tapetach, karuzelach i nie tylko.
Więcej informacji znajdziesz w artykule Renderowanie i obliczenia 3D z użyciem funkcji Renderscript.
Multimedia
- Film poklatkowy
Interfejsy API kamery obsługują teraz nagrywanie filmów poklatkowych.
setCaptureRate()
określa liczbę klatek, ujęć. - Obsługa tekstur w strumieniach obrazów
Nowa funkcja
SurfaceTexture
umożliwia przechwytywanie strumienia obrazu jako tekstury OpenGL ES. Wywołując funkcjęsetPreviewTexture()
w przypadku instancjiCamera
, możesz określićSurfaceTexture
, na którym ma być wyświetlany odtwarzany film lub podgląd klatek z kamery. - Transmisja na żywo przez HTTP
Aplikacje mogą teraz przekazywać adres URL playlisty M3U do frameworku multimedialnego, aby rozpocząć sesję HTTP Live. Platforma mediów obsługuje większość specyfikacji HTTP Live Streaming, w tym adaptacyjną szybkość transmisji bitów. Zapoznaj się z dokumentem Obsługiwane formaty multimediów: znajdziesz więcej informacji.
- dane EXIF
ExifInterface
zawiera nowe pola przysłony, ISO i ekspozycji obecnie się znajdujesz. - Profile kamery
Nowa metoda
hasProfile()
i kilka filmów profile jakości (takie jakQUALITY_1080P
,QUALITY_720P
,QUALITY_CIF
i inne) umożliwiają określenie, opcje jakości. - Przekazywanie plików multimedialnych w formie cyfrowej
Platforma zawiera wbudowane wsparcie dla protokołu MTP/PTP przez USB, co pozwala użytkownikom łatwo przesyłać dowolne typy plików multimedialnych między urządzeniami i na komputer hosta. Programiści mogą tworzyć aplikacje, które umożliwiają użytkownikom tworzenie plików multimedialnych lub zarządzanie nimi, a także ich przenoszenie i udostępnianie na różnych urządzeniach.
- Zarządzanie prawami cyfrowymi (DRM)
Nowa platforma Rozszerzonego zarządzania prawami cyfrowymi (DRM) do sprawdzania i egzekwowania zasad dotyczących treści cyfrowych prawa autorskie. Jest ona implementowana na 2 poziomach architektury:
- Interfejs API platformy DRM, który jest udostępniany aplikacjom i działa przez maszynę wirtualną Dalvik w przypadku aplikacji standardowych.
- Menedżer DRM kodu natywnego, który implementuje interfejs API platformy i udostępnia interfejs dla DRM wtyczki do zarządzania prawami i odszyfrowywania w różnych schematach DRM.
Deweloperom aplikacji platforma oferuje abstrakcyjny, ujednolicony interfejs API, który upraszcza zarządzanie chronionymi treściami. Interfejs API ukrywa złożoność operacji DRM i umożliwia spójny tryb działania w przypadku treści chronionych i niechronionych oraz różnych zabezpieczeń DRM przedsięwzięcia.
W przypadku producentów urządzeń, właścicieli treści i dostawców internetowych multimediów cyfrowych DRM API wtyczki platformy udostępnia sposób dodawania obsługi wybranego schematu DRM do System Android do bezpiecznego egzekwowania ochrony treści.
Wersja testowa nie zawiera żadnych natywnych wtyczek DRM, które umożliwiają sprawdzanie i egzekwowanie zabezpieczeń cyfrowych prawa autorskie. Producenci urządzeń mogą jednak wysyłać do nich wtyczki DRM.
Wszystkie interfejsy DRM znajdziesz w pakiecie
android.drm
.
Pomoc dotycząca klawiatury
- Obsługa modyfikatorów Control, Meta, Caps Lock, Num Lock i Scroll Lock. Więcej informacji znajdziesz w polu
META_CTRL_ON
i powiązanych polach. - Obsługa klawiatur w pełni typowych dla pulpitu, w tym obsługa klawiszy takich jak Escape, Home, End,
Usuń lub inne. Aby określić, czy zdarzenia klawiaturowe pochodzą z pełnej klawiatury, możesz wysłać zapytanie
getKeyboardType()
i sprawdzić, czy występuje w nim wartośćKeyCharacterMap.FULL
. TextView
obsługuje teraz wycinanie, kopiowanie, wklejanie i zaznaczanie wszystkich za pomocą kombinacji klawiszy Ctrl + X, Ctrl + C, Ctrl + V i Ctrl + A. Obsługuje również PageUp/PageDown, Home/End oraz zaznaczanie tekstu przy użyciu klawiatury.KeyEvent
dodaje kilka nowych metod, aby ułatwić sprawdzanie klucza stan modyfikatora. ZobaczhasModifiers(int)
,hasNoModifiers()
,metaStateHasModifiers()
,metaStateHasNoModifiers()
.- Aplikacje mogą implementować niestandardowe skróty klawiszowe przez podklasyfikację
Activity
,Dialog
lubView
i zaimplementowanieonKeyShortcut()
Platforma wywołuje tę metodę za każdym razem, gdy klawisz jest połączony z klawiszem Ctrl. Podczas tworzenia menu Opcje możesz zarejestrować skróty klawiszowe, ustawiając atrybutandroid:alphabeticShortcut
lubandroid:numericShortcut
dla każdego elementu<item>
(lub za pomocąsetShortcut()
). - Android 3.0 obejmuje nową „klawiaturę wirtualną” urządzenie o identyfikatorze
KeyCharacterMap.VIRTUAL_KEYBOARD
. Wirtualna klawiatura ma mapę klawiszy USA w stylu komputerowym, co przydaje się do syntetyzowania kluczowych zdarzeń na potrzeby testowania dane wejściowe.
Zdarzenia podzielonego dotyku
Wcześniej tylko 1 widok mógł przyjmować zdarzenia dotykowe w danym momencie. Android 3.0 umożliwia dzielenie zdarzeń dotykowych na widoki, a nawet okna, dzięki czemu różne widoki mogą przyjmować jednoczesne zdarzenia dotykowe.
Dzielenie zdarzeń dotknięcia jest domyślnie włączone, gdy aplikacja kieruje reklamy
Android 3.0 Oznacza to, że aplikacja ustawiła wartość atrybutu android:minSdkVersion
lub android:targetSdkVersion
na "11"
.
Jednak te właściwości umożliwiają wyłączenie zdarzeń dotyku podzielonego w przypadku widoków w konkretnych grupach widoków i w różnych oknach.
- Atrybut
android:splitMotionEvents
grup widoków danych umożliwia wyłączenie zdarzeń podziału dotknięcia w układzie między widokami podrzędnymi. Na przykład:<LinearLayout android:splitMotionEvents="false" ... > ... </LinearLayout>
W ten sposób widoki podrzędne w układzie liniowym nie mogą dzielić zdarzeń dotyku – w danym momencie tylko jeden widok może otrzymywać zdarzenia dotyku.
- Właściwość stylu
android:windowEnableSplitTouch
pozwala wyłączyć dzielenie zdarzeń dotknięć między oknami przez zastosowanie go do motywu aktywności lub całą aplikację. Na przykład:<style name="NoSplitMotionEvents" parent="android:Theme.Holo"> <item name="android:windowEnableSplitTouch">false</item> ... </style>
Gdy zastosujesz ten motyw do
<activity>
lub<application>
, akceptowane są tylko zdarzenia dotknięcia w bieżącym oknie aktywności. Jeśli na przykład wyłączysz dzielone zdarzenia dotykowe w różnych oknach, pasek systemowy nie będzie mógł odbierać zdarzeń dotykowych w tym samym czasie co aktywność. Nie ma to wpływu na to, czy widoki w ramach aktywności mogą dzielić zdarzenia dotykowe – domyślnie aktywność może nadal dzielić zdarzenia dotykowe na widoki.Więcej informacji na temat tworzenia motywu znajdziesz w artykule Stosowanie stylów i motywów.
WebKit
- Nowa klasa
WebViewFragment
do utworzenia fragmentu złożonego zWebView
- Nowe metody
WebSettings
:setDisplayZoomControls()
umożliwia ukrycie elementy sterujące powiększeniem ekranu, a jednocześnie pozwalają użytkownikowi na powiększanie za pomocą gestów palcami (należy ustawićsetBuiltInZoomControls()
)true
).- Nowa metoda
WebSettings
,setEnableSmoothTransition()
, umożliwia aby uzyskać płynne przejścia podczas przesuwania i powiększania. Po włączeniu WebView wybierze rozwiązanie, które zmaksymalizuje wydajność (np. zawartość WebView może się nie aktualizować podczas przejścia).
- Nowe metody
WebView
:onPause()
oddzwonienie, aby wstrzymać przetwarzanie powiązane z komponentem WebView, gdy jest on ukryty. Jest to przydatne, aby zmniejszyć niepotrzebne wykorzystanie procesora lub ruchu sieciowego, gdy komponent WebView nie jest na pierwszym planie.- wywołanie zwrotne
onResume()
, aby wznowić przetwarzanie związane z WebView, które zostało wstrzymane podczasonPause()
. saveWebArchive()
umożliwia zapisanie jako archiwum internetowe.showFindDialog()
rozpoczyna wyszukiwanie tekstowe w języku: w bieżącym widoku.
Przeglądarka
Do aplikacji Przeglądarka dodawane są następujące funkcje obsługujące aplikacje internetowe:
- Rejestrowanie multimediów
Zgodnie z definicją podaną w dokumencie HTML Media Capture , przeglądarka umożliwia aplikacjom internetowym dostęp do dźwięku, obrazów i wideo możliwości urządzenia. Na przykład ten kod HTML zawiera dane wejściowe, które użytkownik może zrób zdjęcie do przesłania:
<input type="file" accept="image/*;capture=camera" />
Jeśli parametr
capture=camera
zostanie wykluczony, użytkownik będzie mógł zrobić nowe zdjęcie aparatem lub wybrać je z urządzenia (np. z aplikacji Galeria). - Orientacja urządzenia
Zgodnie ze specyfikacją Zdarzenia orientacji urządzenia przeglądarka umożliwia aplikacjom internetowym odsłuchiwanie zdarzeń DOM, które dostarczają informacji o fizycznej orientacji i ruchu urządzenia.
Orientacja urządzenia jest wyrażona za pomocą osi x, y i z, wyrażonej w stopniach, a ruch jest wyrażony danymi o przyspieszeniu i szybkości obrotu. Strona internetowa może rejestrować zdarzenia orientacji, wywołując zdarzenie
window.addEventListener
z typem zdarzenia"deviceorientation"
, oraz zdarzenia ruchu, rejestrując zdarzenie typu"devicemotion"
. - Przekształcenia 3D w CSS
Zgodnie ze specyfikacją Modułu transformacji 3D w kodzie CSS przeglądarka umożliwia przekształcanie elementów renderowanych przez kod CSS w 3 wymiarach.
Narzędzia do obsługi plików JSON
Nowe zajęcia, JsonReader
i JsonWriter
, przydadzą Ci się
odczytu i zapisu strumieni JSON. Nowe interfejsy API uzupełniają klasy org.json
, które wykonują działania
dokumentu w pamięci.
Możesz utworzyć instancję usługi JsonReader
, wywołując
jej konstruktora i przekazując InputStreamReader
, który dostarcza ciąg znaków JSON.
Następnie zacznij odczytywać obiekt, wywołując funkcję beginObject()
, odczytując
nazwa klucza z nextName()
, odczytaj wartość za pomocą metod
odpowiednio do typu, na przykład nextString()
i nextInt()
, i kontynuuj, gdy hasNext()
ma wartość prawda.
Możesz utworzyć instancję JsonWriter
, wywołując jej konstruktor i
przekazując odpowiednią wartość OutputStreamWriter
. Następnie zapisz dane JSON w sposób podobny do czytnika, używając elementu name()
do dodania nazwy właściwości i odpowiedniej metody value()
do dodania odpowiedniej wartości.
Te klasy są domyślnie rygorystyczne. Metoda setLenient()
w każdej klasie powoduje, że są one bardziej liberalne w tym, co akceptują. Ten tryb analizy z łatwością jest też zgodny z domyślnym parsowaniem w org.json
.
Nowe stałe funkcji
<uses-feature>
Element manfest powinien być używany do informowania podmiotów zewnętrznych (takich jak Google Play) o zestawie
funkcje sprzętu i oprogramowania, od których zależy działanie aplikacji. W tej wersji Android dodaje
następujące nowe stałe, które aplikacje mogą zadeklarować za pomocą tego elementu:
"android.hardware.faketouch"
Gdy zadeklarujesz, że aplikacja jest zgodna z urządzeniem, które oferuje z emulacją ekranu dotykowego (lub lepszego). Urządzenie z emulowanym ekranem dotykowym udostępnia użytkownikowi dane wejściowe system, który może emulować podzbiór ekranu dotykowego funkcje zabezpieczeń. Przykładem takiego systemu wejściowego jest mysz lub pilot, który kursor na ekranie. Takie systemy wprowadzania danych obsługują proste zdarzenia dotykowe, takie jak kliknięcie w dół, kliknięcie w górę i przeciągnięcie. Jednak w przypadku bardziej skomplikowanych typów wprowadzania (np. gestami, ulotkami itp.) może być trudniejsze lub bardziej niemożliwe na fałszywych urządzeniach dotykowych (a gesty wielodotykowe na pewno nie są możliwe).
Jeśli Twoja aplikacja nie wymaga skomplikowanych gestów i nie chcesz, aby była odfiltrowywana na urządzeniach z emulowanym ekranem dotykowym, powinnaś zadeklarować
"android.hardware.faketouch"
za pomocą elementu<uses-feature>
. Dzięki temu Twoja aplikacja będzie dostępna dla największej liczby typów urządzeń, także tych, które obsługują tylko emulowane funkcje wejściowe z ekranu dotykowego.Wszystkie urządzenia z ekranem dotykowym obsługują również
"android.hardware.faketouch"
, ponieważ funkcje ekranu dotykowego to nadzwyczajny zestaw funkcji związanych z fałszywym dotykiem. Jeśli więc nie potrzebujesz ekranu dotykowego, dodaj element<uses-feature>
do obsługi fałszywego dotyku.
Nowe uprawnienia
"android.permission.BIND_REMOTEVIEWS"
W przypadku implementacji
RemoteViewsService
musisz zadeklarować to uprawnienie jako wymagane w elementach pliku manifestu<service>
. Na przykład, gdy utworzysz widżet aplikacji, który za pomocąRemoteViewsService
będzie wypełniać kolekcja, wpis w pliku manifestu może wyglądać tak:<service android:name=".widget.WidgetService" android:exported="false" android:permission="android.permission.BIND_REMOTEVIEWS" />
Nowe technologie platformy
- Miejsce na dane
- Obsługa systemu plików ext4 w celu włączenia pamięci eMMC.
- System plików FUSE do obsługi urządzeń MTP.
- obsługa trybu hosta USB do obsługi klawiatur i hubów USB;
- Obsługa MTP/PTP
- Jądro systemu Linux
- Uaktualniono do wersji 2.6.36
- Maszyna wirtualna Dalvik
- Nowy kod do obsługi i optymalizacji pod kątem platformy SMP
- Różne ulepszenia infrastruktury JIT
- Ulepszenia dotyczące zbierania elementów:
- Dostrojone pod kątem SMP
- Obsługa większych rozmiarów sterty
- Ujednolicona obsługa map bitowych i buforów bajtów
- Biblioteki podstawowe Dalvik
- nowa, znacznie szybsza implementacja NIO (nowoczesnej biblioteki we/wy),
- Ulepszone komunikaty o wyjątkach
- Poprawki dotyczące poprawności i wydajności
Raport o różnicach w interfejsie API
Szczegółowy widok wszystkich zmian interfejsu API w Androidzie 3.0 (poziom API 11), zapoznaj się z raportem na temat różnic w interfejsach API.
Poziom API
Platforma Android 3.0 udostępnia zaktualizowaną wersję platformy API. Interfejs API Androida 3.0 ma przypisany identyfikator liczbowy 11, który jest przechowywany w systemie. Ten identyfikator, zwany „poziomem interfejsu API”, umożliwia systemowi prawidłowe określenie, czy aplikacja jest zgodna z systemem, zanim zostanie zainstalowana.
Aby skorzystać z interfejsów API wprowadzonych w Androidzie 3.0 w aplikacji,
musisz skompilować aplikację zgodnie z biblioteką Androida w bibliotece
platformę SDK Androida 3.0, W zależności od potrzeb
trzeba też dodać android:minSdkVersion="11"
do elementu <uses-sdk>
w nagłówku aplikacji
pliku manifestu. Jeśli Twoja aplikacja została zaprojektowana do działania tylko na Androidzie 2.3 lub nowszym,
zadeklarowanie tego atrybutu uniemożliwia wcześniejsze zainstalowanie aplikacji
do obsługi różnych wersji platformy.
Więcej informacji znajdziesz w artykule Co to jest interfejs API Poziom?