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 pod kątem Androida 3.0, użyj Menedżera pakietów Android SDK, aby pobrać platformę do pakietu SDK.
Omówienie interfejsu API
Poniższe sekcje zawierają omówienie techniczne nowości dla programistów w Androidzie 3.0, , w tym o nowych funkcjach i zmianach w platformie 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 kodu, musisz rozszerzyć klasę Fragment
i zaimplementować kilka cykli życia
metod wywołania zwrotnego, podobnych do metody Activity
. Następnie możesz połączyć kilka
z fragmentami w ramach pojedynczej aktywności, aby utworzyć interfejs z kilkoma panelami, w którym każdy
panel zarządza własnym cyklem życia i danymi wejściowymi użytkownika.
Możesz też użyć fragmentu bez podawania interfejsu użytkownika, a zamiast tego użyć go jako instancji roboczej dla danej aktywności, np. do zarządzania postępem pobierania, który ma miejsce tylko wtedy, jest w toku.
Dodatkowo:
- Fragmenty są niezależne i można ich używać ponownie w wielu działaniach
- Możesz dodawać, usuwać, zastępować i animować fragmenty w aktywności
- Możesz dodać fragmenty do stosu zarządzanego przez aktywność, zachowując stan Fragmenty, które się zmieniają, pozwalają użytkownikowi przejść wstecz stany
- Po podaniu alternatywnych układów, można mieszać i dopasowywać fragmenty, rozmiaru i orientacji ekranu.
- Fragmenty mają bezpośredni dostęp do aktywności w kontenerze i mogą dodawać elementy do Pasek działań aktywności (omówione dalej)
Aby zarządzać fragmentami w swojej aktywności, musisz używać interfejsu FragmentManager
, który udostępnia kilka interfejsów API do interakcji z fragmentami, takich jak
Dotyczy to znajdowania fragmentów w aktywności i wyrywania fragmentów z tyłu, aby przywrócić
poprzedniego stanu.
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 kodu 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. W lewym rogu znajduje się logo aplikacji, a dodatkowo dostępny jest nowy interfejs dla elementów menu Opcje. Dodatkowo Pasek działań umożliwia:
- Pozycje menu możesz dodawać bezpośrednio na pasku działań jako „działania”.
W deklaracji XML dotyczącej pozycji menu umieść 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 pozycji menu dodaj atrybut
android:actionViewLayout
z zasobem szablonu lub atrybutemandroid:actionViewClass
o nazwie klasy widżet. (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
Do logo aplikacji jest automatycznie przypisywany identyfikator
android.R.id.home
. które system dostarcza do wywołania zwrotnegoonOptionsItemSelected()
Twojej aktywności po 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, w pliku manifestu podaj logo aplikacji za pomocą atrybutu
android:logo
a następnie wywołajsetDisplayUseLogoEnabled(true)
w 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 próbki są również dostępne w aplikacji w wersji demonstracyjnej 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ć ze schowka, pobierz globalny obiekt ClipboardManager
, dzwoniąc pod numer 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ę. Tworzenie obiektu ClipData
zawierających tylko jeden element ClipData.Item
, możesz użyć jednej z metod pomocniczych,
takich jak newPlainText()
, newUri()
i newIntent()
, które zwracają obiekt ClipData
wstępnie załadowany
ClipData.Item
.
Aby dodać element ClipData
do schowka, przekaż go do setPrimaryClip()
w instancji ClipboardManager
.
Następnie możesz odczytać plik ze schowka (aby go wkleić), wywołając getPrimaryClip()
w ClipboardManager
. Odpowiedź na ClipData
to:
być skomplikowane i wymagać pewności, że poradzi sobie z obsługą typu danych w schowku
przed wklejeniem.
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 sekcji Kopia i wklej dokumentację. 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 użytkownika 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 wziąć udział w przeciąganiu
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ąganie obiektu w View
(otrzymać „upuszczanie”), zarejestruj widok
o wartości OnDragListener
, dzwoniąc do: 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 odbierania może pobierać typ zdarzenia dostarczany do onDragEvent()
przez wywołanie getAction()
w DragEvent
.
Uwaga: chociaż zdarzenie przeciągania może zawierać obiekt ClipData
, nie jest to związane ze schowkiem systemowym. 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 zapewniających użytkownikom bardziej interaktywne widżety aplikacji
Ekran główny, w tym: GridView
, ListView
, StackView
, ViewFlipper
i AdapterViewFlipper
.
Co ważniejsze, możesz używać nowej usługi RemoteViewsService
do tworzenia aplikacji
widżety z kolekcjami, korzystające z takich widżetów jak GridView
, ListView
i StackView
, które bazują na danych zdalnych,
np. od dostawcy treści.
Klasa AppWidgetProviderInfo
(zdefiniowana w pliku XML za pomocą elementu <appwidget-provider>
) obsługuje też 2 nowe pola: autoAdvanceViewId
i previewImage
. W polu autoAdvanceViewId
możesz podać identyfikator widoku danych
Widok podrzędny widżetu aplikacji, który powinien być automatycznie zaawansowany przez hosta widżetu aplikacji.
Pole previewImage
określa podgląd tego, co
widżet aplikacji wygląda i wyświetla się użytkownikowi w selektorze widżetów. Jeśli to pole nie jest
zostanie użyta ikona widżetu aplikacji.
Aby ułatwić utworzenie obrazu podglądu widżetu aplikacji (określony w polu previewImage
), emulator Androida zawiera komponent
o nazwie „Widget Preview”. Aby utworzyć obraz podglądu, uruchom tę aplikację, wybierz
widżet aplikacji i skonfiguruj sposób wyświetlania obrazu podglądu, a następnie zapisz zmiany.
i umieścić go w rysowalnych zasobach aplikacji.
Implementację nowych funkcji widżetów aplikacji możesz zobaczyć w widżecie aplikacji StackView i widżecie listy pogody aplikacji.
Powiadomienia na pasku stanu
Rozszerzyliśmy interfejsy API Notification
, aby obsługiwały większą ilość treści
na pasku powiadomień, a dzięki nowej klasie Notification.Builder
możesz łatwo
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 platformy ułatwiają asynchroniczne ładowanie danych za pomocą klasy Loader
. Można go używać w połączeniu z komponentami interfejsu, takimi jak widoki
fragmenty kodu, aby dynamicznie wczytywać dane z wątków instancji roboczych. Podklasa CursorLoader
została specjalnie zaprojektowana, aby Ci w tym pomóc w przypadku danych opartych na
ContentProvider
.
Wystarczy, że zaimplementujesz interfejs LoaderCallbacks
, aby odbierać wywołania zwrotne po przesłaniu żądania nowego programu wczytującego lub gdy dane zostały
został zmieniony, a następnie wywołaj initLoader()
, aby zainicjować
program ładujący z Twoją aktywnością lub fragmentem.
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 dla aplikacji do weryfikowania stanu połączonych interfejsów Bluetooth A2DP urządzenia z profilem zestawu słuchawkowego. 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ć odpowiednie BluetoothProfile
, wywołując funkcję getProfileProxy()
przy użyciu A2DP
lub HEADSET
stałą profilu i BluetoothProfile.ServiceListener
, aby odebrać
gdy klient Bluetooth jest podłą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
- Powtórz ilość i sposób działania
- Typ interpolacji czasowej
- Animator ustawia odtwarzanie animacji razem, po kolei lub po określonych opóźnieniach.
- Opóźnienie odświeżania klatki
Możesz zdefiniować te i inne aspekty animacji dla liczb całkowitych, zmiennoprzecinkowych i szesnastkowych obiektu
kolorów. 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 zna konkretnej
animowany obiekt lub właściwość. 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ę w czasie, oraz zbioru wartości, które mają być stosowane do tej właściwości
i rozpoczyna animację.
Dodatkowo klasa LayoutTransition
włącza automatyczne przenoszenie.
animacje związane ze zmianami, które wprowadzasz 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 Animacji właściwości. Dostępne opcje zapoznaj się też z kilkoma przykładami interfejsów API animacji w interfejsie API aplikacji demonstracyjnej.
Rozszerzona platforma UI
- Wybór jednokrotnego wyboru w widokach ListView i GridView
Nowy tryb
CHOICE_MODE_MULTIPLE_MODAL
w usłudzesetChoiceMode()
umożliwia użytkownikom wybranie wielu elementów z:ListView
lubGridView
. Zastosowanie w połączeniu z paskiem działań użytkownicy mogą wybrać wiele elementów, a następnie wybrać opcję z listy na pasku działań (która została przekształcona w Wielokrotny wybór, Tryb działania).Aby włączyć wybór jednokrotnego wyboru, zadzwoń pod numer
setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)
i zarejestrujMultiChoiceModeListener
z:setMultiChoiceModeListener()
.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 ułatwiają stosowanie przekształceń 2D i 3D do widoków w Twojej aktywności układ. 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 układzie , aby zastosować domyślne przekształcenie. 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 systemu i jego ogólny wygląd zostały zmienione i uwzględniają nowy „holograficzny” motyw interfejsu. System zastosuje nowy motyw za pomocą standardowego systemu stylów i motywów.
W przypadku każdej aplikacji kierowanej na platformę Android 3.0 – ustaw
android:minSdkVersion
lubandroid:targetSdkVersion
do"11"
– domyślnie dziedziczy motyw holograficzny. Jeśli jednak aplikacja ma również własny motyw, zastąpi on motyw motyw holograficzny, chyba że zaktualizujesz style, aby go odziedziczyć.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 starszą niż 3.0 i ma zastosowanie motywów niestandardowych, wybierz motyw odpowiedni dla danej platformy, wersji. - Nowe widżety
AdapterViewAnimator
Klasa podstawowa obiektu
AdapterView
, który wykonuje animacje przy przełączaniu między różnymi poglądami.AdapterViewFlipper
Prosty
ViewAnimator
wyświetlający animację między co najmniej 2 widokami, których które zostały do niego dodane. Wyświetlane jest tylko jedno dziecko naraz. 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 kalendarz do wybranej daty. Możesz skonfigurować zakres dat dostępny w widżecie.
ListPopupWindow
Zakotwicza się w widoku hosta i wyświetla listę opcji, np. sugestie podczas wpisywania tekstu w widoku
EditText
.NumberPicker
Pozwala użytkownikowi wybrać liczbę ze 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 wprowadzania umożliwia przewiń wartości lub dotknij ponownie, 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 na określonej aktywność i wyświetlanie sugestii wyszukiwania (w taki sam sposób, jak w przypadku tradycyjnego okna wyszukiwania). Ten jest szczególnie przydatny, gdy udostępniasz na pasku działań widżet wyszukiwania. Aby dowiedzieć się więcej, Więcej informacji: Tworzenie interfejsu wyszukiwania.
StackView
Widok, który wyświetla elementy podrzędne w stosie 3D i umożliwia użytkownikom przesunięcie palcem jak rolodex.
Grafika
- Grafika 2D z akceleracją sprzętową
Możesz teraz włączyć mechanizm renderowania OpenGL w swojej aplikacji, ustawiając
android:hardwareAccelerated="true"
w<application>
elementu manifestu. elementu lub pojedynczej jednostki<activity>
.Ta flaga ułatwia aplikacjom, ponieważ przyspiesza ich rysowanie. Dzięki temu animacje są płynniejsze, płynniejsze przewijanie oraz ogólne lepsze działanie i lepsze reagowanie na interakcje użytkowników.
- Wyświetl obsługę warstw sprzętu i oprogramowania
Domyślnie w
View
nie określono żadnej 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 wsparta teksturą specyficzną dla sprzętu (zwykle obiektami Frame Buffer lub FBO na sprzęcie OpenGL) i powoduje renderowanie widoku za pomocą renderowania sprzętowego Androida. potoku, ale tylko wtedy, gdy włączona jest akceleracja sprzętowa w hierarchii widoków. Gdy sprzęt akceleracja jest wyłączona, warstwy sprzętowe zachowują się dokładnie tak samo jak warstwy oprogramowania.
Warstwa oprogramowania jest wspierana przez bitmapę i sprawia, że widok jest renderowany za pomocą kodu potoku renderowania programowego, nawet jeśli włączona jest akceleracja sprzętowa. 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
. - Mechanizm renderowania 3D w 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 umożliwiają teraz nagrywanie filmów w trybie poklatkowym.
setCaptureRate()
określa liczbę klatek, ujęć. - Obsługa tekstur w strumieniach obrazów
Nowy
SurfaceTexture
umożliwia przechwytywanie strumienia obrazów w formacie OpenGL ES teksturę. Wywołując połączenie z firmąsetPreviewTexture()
w sprawie:Camera
możesz określićSurfaceTexture
, na podstawie których będą rysowane klatki odtwarzania filmu lub klatki podglądu z obiektu aparat fotograficzny. - Transmisja na żywo przez HTTP
Teraz aplikacje mogą przekazywać adres URL playlisty M3U do platformy multimediów, aby rozpocząć HTTP Live w ramach sesji strumieniowania. Platforma multimedialna obsługuje większość specyfikacji HTTP transmisji na żywo, w tym adaptacyjnej szybkości 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. - Przesyłanie plików multimedialnych w mediach cyfrowych
Platforma ma wbudowaną obsługę protokołu Media/Picture Transfer Protocol (MTP/PTP) przez USB, który pozwala użytkownikom łatwo przenosić dowolne pliki multimedialne między urządzeniami i na komputer. Programiści mogą wykorzystać tę pomoc, tworząc aplikacje umożliwiające użytkownikom tworzenie treści pliki multimedialne, które mogą przenieść lub udostępnić między urządzeniami.
- 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 zaimplementowany w dwóch warstwach architektonicznych:
- interfejs API platformy DRM, który jest dostępny dla aplikacji i uruchamiany przez maszynę wirtualną Dalvik przez standardowych zastosowań.
- 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.
Dla deweloperów aplikacji platforma ta udostępnia abstrakcyjny, ujednolicony interfejs API, który upraszcza zarządzania treścią chronioną. 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. Jednak producenci urządzeń mogą wysyłać do nich wtyczki DRM.
Wszystkie interfejsy DRM API znajdziesz w pakiecie
android.drm
.
Obsługa klawiatury
- Obsługa modyfikatorów Control, Meta, Caps Lock, Num Lock i Scroll Lock. Aby dowiedzieć się więcej,
zobacz
META_CTRL_ON
i powiązane pola. - 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 kluczowe zdarzenia pochodzą z pełnej klawiatury,
wysyłam zapytanie do:
getKeyboardType()
i sprawdzam:KeyCharacterMap.FULL
TextView
umożliwia teraz wycinanie, kopiowanie i wycinanie za pomocą klawiatury i zaznacz wszystkie, używając kombinacji klawiszy Control+X, Control+C Control + V i Control + 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 opcji możesz zarejestrować klawiaturę na skróty przez ustawienie atrybutuandroid:alphabeticShortcut
lubandroid:numericShortcut
dla każdej wartości<item>
element (lubsetShortcut()
). - 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 zdarzenie kliknięcia można było akceptować tylko w jednym widoku. Android 3.0 Dodano obsługę rozdzielania zdarzeń dotknięcia między widoki, a nawet okna, dzięki czemu różne widoki mogą jednoczesnych dotknięć.
Dzielenie zdarzeń dotknięcia jest domyślnie włączone, gdy aplikacja kieruje reklamy
Android 3.0 Oznacza to, że gdy aplikacja ustawi android:minSdkVersion
lub wartość atrybutu android:targetSdkVersion
do "11"
.
Jednak poniższe właściwości pozwalają na wyłączenie dzielenia zdarzeń dotknięcia między widokami określonych 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>
Dzięki temu w widokach podrzędnych w układzie liniowym nie można dzielić zdarzeń dotknięcia – tylko jeden widok aby 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. Na przykład dzięki wyłączeniu podziału zdarzeń dotknięcia w oknach, pasek systemowy nie może odbierać takich zdarzeń jednocześnie działania. Nie ma to wpływu na to, czy wyświetlenia w aktywności mogą dzielić kliknięcia zdarzeń – domyślnie aktywność może nadal dzielić zdarzenia dotyku między 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. Gdy ta opcja jest włączona, WebView wybierze rozwiązanie aby zmaksymalizować wydajność (np. zawartość komponentu WebView może nie być aktualizowana podczas przejścia).
- Nowe metody
WebView
:- Wywołanie zwrotne w usłudze
onPause()
, aby wstrzymać przetwarzanie powiązane z komponentem WebView, gdy jest on ukryty. Przydaje się to, by zmniejszyć zbędny procesor lub ruch w sieci, gdy komponent WebView nie znajduje się na pierwszym planie. onResume()
oddzwonienie, aby wznowić przetwarzanie powiązany z komponentem WebView, który został wstrzymany w czasieonPause()
.saveWebArchive()
umożliwia zapisanie jako archiwum internetowe.showFindDialog()
rozpoczyna wyszukiwanie tekstowe w języku: w bieżącym widoku.
- Wywołanie zwrotne w usłudze
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" />
Wykluczając parametr
capture=camera
, użytkownik może też przechwytywać nowe zdjęcie z aparatu lub wybrać je z urządzenia (np. z aplikacji Galeria). - Orientacja urządzenia
Zgodnie z definicją zawartą w zdarzeniu Orientacja urządzenia specyfikacja, przeglądarka umożliwia aplikacjom internetowym nasłuchiwanie zdarzeń DOM, które dostarczają informacje na temat 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 zarejestrować się jako orientacja wydarzenia, wywołując zdarzenie
window.addEventListener
z typem zdarzenia"deviceorientation"
i rejestrować zdarzenia ruchu, rejestrując typ zdarzenia"devicemotion"
. - Przekształcenia 3D CSS
Zgodnie z definicją zawartą w przekształceniu CSS 3D specyfikacji modułu, przeglądarka pozwala na przekształcanie elementów renderowanych przez CSS w trzy wymiarów.
Narzędzia 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
podobnie jak w przypadku czytnika, używając name()
do dodania nazwy właściwości
i odpowiednią metodę value()
, aby dodać odpowiednie
.
Te klasy są domyślnie rygorystyczne. setLenient()
są bardziej liberalne w kwestiach, które akceptują. Wyrozumiałość
tryb analizy jest również zgodny z domyślnym parserem org.json
.
Nowe stałe cech
<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, 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 aplikacja nie wymaga skomplikowanych gestów, a Ty wymagasz nie chcesz, żeby aplikacja była odfiltrowywana z urządzeń z emulowanym ekranem dotykowym, powinien zadeklarować
"android.hardware.faketouch"
z elementem<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<uses-feature>
dla fałszywego dotyku.
Nowe uprawnienia
"android.permission.BIND_REMOTEVIEWS"
Musisz je zadeklarować jako wymagane uprawnienia w pliku manifestu
<service>
dla implementacjiRemoteViewsService
. 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 platform
- Miejsce na dane
- obsługę systemu plików ext4, aby włączyć wbudowaną pamięć eMMC.
- System plików FUSE do obsługi urządzeń MTP.
- Obsługa trybu hosta USB w przypadku klawiatur i koncentratoró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 systemu zbierania śmieci:
- 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 (nowoczesna biblioteka I/O)
- Ulepszone komunikaty o wyjątkach
- Poprawki 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 jest przydzielony identyfikator w postaci liczby całkowitej – 11 – czyli zapisanych w samym systemie. Ten identyfikator, nazywany „poziomem interfejsu API”, umożliwia stosowanie funkcji systemu pozwalającego poprawnie określić, czy aplikacja jest zgodna z systemu.
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?