APIs unter Android 3.0

API-Ebene: 11

Für Entwickler: Die Android 3.0-Plattform (HONEYCOMB) kann heruntergeladen werden Komponente für das Android SDK. Die herunterladbare Plattform umfasst eine Android-Bibliothek und ein Android-System. -Image sowie eine Reihe von Emulator-Skins und mehr. Die herunterladbare Plattform enthält keine externen Bibliotheken.

Für Entwickler ist die Android 3.0-Plattform als herunterladbare Komponente für das Android SDK verfügbar. Die herunterladbare Plattform umfasst eine Android-Bibliothek und ein System-Image sowie eine Reihe von Emulator-Skins mehr. Um mit der Entwicklung oder Tests für Android 3.0 zu beginnen, Verwenden Sie den Android SDK Manager, um die Plattform in Ihr SDK herunterzuladen.

API-Übersicht

In den folgenden Abschnitten erhalten Sie einen technischen Überblick über die Neuerungen für Entwickler bei Android 3.0, einschließlich neuer Funktionen und Änderungen an der Framework-API seit der vorherigen Version.

Fragmente

Ein Fragment ist eine neue Framework-Komponente, mit der Sie verschiedene Elemente eines Aktivität in eigenständige Module umwandeln, die ihre eigene Benutzeroberfläche und ihren eigenen Lebenszyklus definieren. So erstellen Sie ein Fragment, müssen Sie die Fragment-Klasse erweitern und mehrere Lebenszyklus- -Rückrufmethoden, ähnlich wie Activity. Sie können dann mehrere Fragmente in einer einzigen Aktivität kombinieren, um eine UI mit mehreren Fensterbereichen zu erstellen, in der jeder Bereich seinen eigenen Lebenszyklus und Nutzereingaben verwaltet.

Sie können ein Fragment auch ohne Benutzeroberfläche verwenden und es stattdessen als Worker für die Aktivität verwenden, z. B. um den Fortschritt eines Downloads zu verwalten, der nur ausgeführt wird, während die Aktivität ausgeführt wird.

Zusätzlich:

  • Fragmente sind in sich geschlossen und können in mehreren Aktivitäten wiederverwendet werden.
  • Sie können Fragmente innerhalb der Aktivität hinzufügen, entfernen, ersetzen und animieren.
  • Sie können Fragmente zu einem Back Stack hinzufügen, der von der Aktivität verwaltet wird, und dabei den Status wie sie geändert werden, und ermöglichen es den Nutzenden, rückwärts durch die verschiedenen Bundesstaaten
  • Durch die Bereitstellung von alternative Layouts verwenden, können Sie Fragmente mischen und anpassen, Bildschirmgröße und -ausrichtung
  • Fragmente haben direkten Zugriff auf ihre Containeraktivität und können Elemente zur Aktionsleiste der Aktivität beitragen (siehe nächster Abschnitt).

Wenn Sie die Fragmente in Ihrer Aktivität verwalten möchten, müssen Sie die FragmentManager verwenden. Diese bietet mehrere APIs zur Interaktion mit Fragmenten, z. B. zum Suchen von Fragmenten in der Aktivität und zum Entfernen von Fragmenten aus dem Backstack, um ihren vorherigen Status wiederherzustellen.

Um eine Transaktion durchzuführen, z. B. ein Fragment hinzuzufügen oder zu entfernen, musst du eine FragmentTransaction erstellen. Sie können dann Methoden wie add(), remove() oder replace() aufrufen. Nachdem Sie alle Änderungen für die Transaktion vorgenommen haben, müssen Sie commit() aufrufen. Das System wendet dann die Fragmenttransaktion auf die Aktivität an.

Weitere Informationen zur Verwendung von Fragmenten finden Sie in der Dokumentation zu Fragmenten. Mehrere Beispiele sind auch in den API Demos anwenden.

Aktionsleiste

Die Aktionsleiste ersetzt die herkömmliche Titelleiste oben im Aktivitätsfenster. Es enthält das Logo der Anwendung in der linken Ecke und bietet eine neue Benutzeroberfläche für Elemente im Options Menu (Optionsmenü). Außerdem haben Sie über die Aktionsleiste folgende Möglichkeiten:

  • Fügen Sie Menüpunkte direkt in der Aktionsleiste als „Aktionselemente“ hinzu.

    Gib in deiner XML-Deklaration für den Artikel auf der Speisekarte das Attribut android:showAsAction mit dem Wert "ifRoom" an. Wenn genügend Platz vorhanden ist, wird das Menüelement direkt in der Aktionsleiste angezeigt. Andernfalls wird das Element Dreipunkt-Menü rechts in der Aktionsleiste.

  • Eine Aufgabe durch ein Widget (z. B. ein Suchfeld) ersetzen, indem Sie eine „Aktionsansicht“.

    Fügen Sie in der XML-Deklaration für den Menüpunkt das android:actionViewLayout-Attribut mit einer Layoutressource oder das android:actionViewClass-Attribut mit dem Klassennamen eines Widgets hinzu. Außerdem muss das Attribut android:showAsAction deklariert werden, damit der Artikel in der Aktionsleiste.) Wenn in der Aktionsleiste nicht genügend Platz ist und das Element in der Dreipunkt-Menü funktioniert, verhält es sich wie ein regulärer Menüpunkt und zeigt das Widget nicht an.

  • Eine Aktion zum Anwendungslogo hinzufügen und durch ein benutzerdefiniertes Logo ersetzen

    Dem App-Logo wird automatisch die android.R.id.home-ID zugewiesen, die das System beim Berühren an den onOptionsItemSelected()-Callback Ihrer Aktivität sendet. Antworten Sie einfach in Ihrer Rückrufmethode auf diese ID, um eine Aktion auszuführen, z. B. die Startseite Ihrer Anwendung aufzurufen.

    Wenn Sie das Symbol durch ein Logo ersetzen möchten, geben Sie das Logo Ihrer Anwendung in der Manifestdatei mit dem Attribut android:logo an und rufen Sie dann setDisplayUseLogoEnabled(true) in Ihrer Aktivität auf.

  • Fügen Sie Navigationspfade hinzu, um durch den Back Stack von Fragmenten rückwärts zu navigieren
  • Tabs oder Drop-down-Listen zum Navigieren durch Fragmente hinzufügen
  • Aktionsleiste mit Designs und Hintergründen anpassen

Die Aktionsleiste ist Standard für alle Anwendungen, die das neue holografische Design verwenden: ebenfalls Standard, wenn Sie entweder android:minSdkVersion oder android:targetSdkVersion auf "11" festlegen.

Weitere Informationen finden Sie in der Dokumentation zur Aktionsleiste. In der Anwendung API-Demos sind auch mehrere Beispiele verfügbar.

Systemzwischenablage

Anwendungen können jetzt nicht nur Text, sondern auch andere Daten in die systemweite Zwischenablage kopieren und daraus einfügen. Zugeschnittene Daten können reiner Text, ein URI oder eine Absicht sein.

Wenn Sie dem System über einen Contentanbieter Zugriff auf die Daten gewähren, die der Nutzer kopieren soll, kann er komplexe Inhalte (z. B. ein Bild oder eine Datenstruktur) aus Ihrer Anwendung kopieren und in eine andere Anwendung einfügen, die diese Art von Inhalten unterstützt.

Wenn Sie die Zwischenablage verwenden möchten, rufen Sie getSystemService(CLIPBOARD_SERVICE) auf, um das globale ClipboardManager-Objekt abzurufen.

Wenn du ein Element in die Zwischenablage kopieren möchtest, musst du ein neues ClipData-Objekt erstellen, das ein oder mehrere ClipData.Item enthält -Objekte, die jeweils eine einzelne Entität beschreiben. So erstellen Sie ein ClipData-Objekt: mit nur einer ClipData.Item enthält, können Sie eine der Hilfsmethoden verwenden: wie newPlainText(), newUri() und newIntent(). Diese geben jeweils ein ClipData-Objekt zurück, das mit dem ClipData.Item, die Sie angeben.

Wenn Sie ClipData in die Zwischenablage einfügen möchten, übergeben Sie sie an setPrimaryClip() für Ihre Instanz von ClipboardManager.

Sie können dann eine Datei aus der Zwischenablage lesen (um sie einzufügen), indem Sie getPrimaryClip() auf der ClipboardManager aufrufen. Die Verarbeitung der empfangenen ClipData kann kompliziert sein. Sie müssen sich vergewissern, dass Sie den Datentyp in der Zwischenablage verarbeiten können, bevor Sie versuchen, ihn einzufügen.

Die Zwischenablage enthält nur ein Element der abgeschnittenen Daten (ein ClipData- Objekt) gleichzeitig, aber eine ClipData kann mehrere ClipData.Items enthalten.

Weitere Informationen finden Sie in der Kopie und Einfügen. Eine einfache Implementierung von Kopieren und Einfügen ist auch in den API-Demos zu sehen. und eine umfassendere Implementierung im Note Pad-Beispiel.

Drag-and-Drop

Neue APIs vereinfachen Drag-and-drop-Vorgänge in der Benutzeroberfläche Ihrer Anwendung. Ein Drag Vorgang ist die Übertragung irgendeiner Art von Daten, die in einem ClipData durchgeführt werden. von einem Ort zum anderen. Der Start- und Endpunkt für den Drag-Vorgang ist ein View. Die APIs, die die Drag-and-drop-Vorgänge direkt ausführen, sind in der Klasse View.

Ein Drag-and-drop-Vorgang hat einen Lebenszyklus, der durch mehrere Ziehaktionen definiert wird, die jeweils durch ein DragEvent-Objekt wie ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED und ACTION_DROP definiert sind. Jede Ansicht, die an einem Ziehen-Vorgang teilnehmen soll, kann auf diese Aktionen warten.

Wenn Sie Inhalte in Ihrer Aktivität per Drag-and-drop verschieben möchten, rufen Sie startDrag() auf einem View auf und geben Sie ein ClipData-Objekt an, das die zu ziehenden Daten darstellt, ein View.DragShadowBuilder, um den „Schatten“ zu ermöglichen, den Nutzer beim Ziehen unter ihren Fingern sehen, und ein Object, das Informationen zum Ziehobjekt mit Ansichten teilen kann, die das Objekt möglicherweise empfangen.

Wenn Sie ein Objekt in eine View ziehen möchten (das „Drop“-Ereignis empfangen möchten), registrieren Sie die Ansicht mit einer OnDragListener, indem Sie setOnDragListener() aufrufen. Wenn in der Ansicht ein Drag-Ereignis stattfindet, Das System ruft onDrag() für OnDragListener auf, das ein DragEvent empfängt. beschreiben, welche Art von Drag-Aktion stattgefunden hat, z. B. ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED und ACTION_DROP. Während eines Drag-Vorgangs ruft das System wiederholt onDrag() für die Ansicht unter dem Drag-Vorgang auf, um ein Stream von Drag-Events. Die empfangende Ansicht kann den Ereignistyp abfragen, der an onDragEvent() gesendet wurde, indem getAction() auf DragEvent aufgerufen wird.

Hinweis: Ein Drag-Ereignis kann zwar ein ClipData-Objekt enthalten, hat aber nichts mit der System-Zwischenablage zu tun. Beim Ziehen und Droppen sollten die gezogenen Daten niemals in die Systemzwischenablage kopiert werden.

Weitere Informationen hierzu finden Sie im Abschnitt Ziehen und Dokumentation löschen. Eine Implementierung von Drag-and-drop finden Sie auch in der Anwendung API-Demos und in der Anwendung Honeycomb Gallery.

App-Widgets

Android 3.0 unterstützt mehrere neue Widget-Klassen für interaktivere App-Widgets für die Nutzer. Startbildschirm, darunter: GridView, ListView, StackView, ViewFlipper und AdapterViewFlipper.

Noch wichtiger ist, dass Sie mit der neuen RemoteViewsService App-Widgets mit Sammlungen erstellen können. Dazu verwenden Sie Widgets wie GridView, ListView und StackView, die von Remote-Daten unterstützt werden, z. B. von einem Contentanbieter.

Die Klasse AppWidgetProviderInfo (in XML mit einem <appwidget-provider>-Element definiert) unterstützt ebenfalls zwei neue Felder: autoAdvanceViewId und previewImage. Im Feld autoAdvanceViewId können Sie die Ansichts-ID der App-Widget-Unteransicht, die vom Host des App-Widgets automatisch erweitert werden sollte. Im Feld previewImage wird eine Vorschau des App-Widgets angezeigt, die dem Nutzer in der Widget-Auswahl angezeigt wird. Wenn dieses Feld nicht angegeben ist, wird das Symbol des App-Widgets für die Vorschau verwendet.

Zum Erstellen eines Vorschaubilds für Ihr App-Widget, das Sie im Feld previewImage angeben, enthält der Android-Emulator die Anwendung „Widget-Vorschau“. Um ein Vorschaubild zu erstellen, starten Sie diese Anwendung, wählen Sie das App-Widget für deine App und lege fest, wie das Vorschaubild angezeigt werden soll. Klicke danach auf "Speichern". und platziere es in den Drawable-Ressourcen deiner App.

Eine Implementierung der neuen App-Widget-Funktionen finden Sie im StackView App Widget und im Wetterlisten-Widget. Anwendungen.

Benachrichtigungen in der Statusleiste

Die Notification APIs wurden erweitert, um inhaltsreichere Benachrichtigungen in der Statusleiste zu unterstützen. Mit einer neuen Notification.Builder-Klasse können Sie außerdem ganz einfach Notification-Objekte erstellen.

Neue Funktionen:

  • Unterstützung für ein großes Symbol in der Benachrichtigung mit setLargeIcon() Das ist normalerweise bei sozialen Anwendungen, um das Kontaktfoto der Person zu zeigen, die die Quelle des oder Medien-Apps eine Miniaturansicht des Albums anzeigen.
  • Unterstützung für benutzerdefinierte Layouts im Statusleisten-Ticker mit setTicker()
  • Unterstützung von benutzerdefinierten Benachrichtigungslayouts, um Schaltflächen mit PendingIntents für interaktivere Benachrichtigungs-Widgets einzubinden. So kann beispielsweise eine Benachrichtigung die Musikwiedergabe steuern, ohne eine Aktivität zu starten.

Ladeprogramme für Inhalte

Neue Framework-APIs ermöglichen das asynchrone Laden von Daten mithilfe der Klasse Loader. Sie können sie in Kombination mit UI-Komponenten wie Ansichten und Fragmenten verwenden, um Daten dynamisch aus Worker-Threads zu laden. Die abgeleitete CursorLoader-Klasse wurde speziell dafür entwickelt, ContentProvider.

Sie müssen lediglich die Schnittstelle LoaderCallbacks implementieren, um Rückrufe zu erhalten, wenn ein neues Ladeprogramm angefordert wird oder die Daten geändert haben, dann rufen Sie initLoader() auf, um die Loader für Ihre Aktivität oder Ihr Fragment.

Weitere Informationen finden Sie in der Dokumentation zu Loaders. Beispielcode mit Ladeprogrammen finden Sie auch in den Samples LoaderCursor und LoaderThrottle.

Bluetooth A2DP- und Headset-APIs

Android umfasst jetzt APIs für Anwendungen, um den Status der verbundenen Bluetooth-A2DP- und Geräte mit Headset-Profilen. So können Apps beispielsweise erkennen, wenn ein Bluetooth-Headset zum Musikhören verbunden sind und den Nutzer entsprechend informieren. Anwendungen können auch Broadcasting für anbieterspezifische AT-Befehle und informieren den Nutzer über den Status der Gerät, z. B. wenn der Akku des verbundenen Geräts schwach ist.

Sie können die entsprechende BluetoothProfile initialisieren, indem Sie getProfileProxy() mit der A2DP- oder HEADSET-Profilkonstante und einer BluetoothProfile.ServiceListener aufrufen, um Rückrufe zu erhalten, wenn der Bluetooth-Client verbunden oder getrennt ist.

Animations-Framework

Mit dem neuen flexiblen Animations-Framework können Sie beliebige Eigenschaften beliebiger Objekte animieren (Ansicht, Drawable, Fragment, Objekt oder irgendetwas anderes). Sie können damit mehrere Aspekte eines Animationen. Beispiele:

  • Dauer
  • Wiederholungsbetrag und -verhalten
  • Art der Zeitinterpolation
  • Animationen werden zusammen, nacheinander oder nach bestimmten Verzögerungen abgespielt.
  • Verzögerung bei der Frameaktualisierung

Sie können diese und andere Animationsaspekte für die Ganzzahl-, Gleitkomma- und Hexadezimalwerte eines Objekts definieren Farbwerte. Das heißt, wenn ein Objekt ein Eigenschaftsfeld für einen dieser Typen hat, den Wert im Laufe der Zeit ändern, um sich auf eine Animation zu auswirken. Um einen anderen Werttyp zu animieren, dem System, wie die Werte für den jeweiligen Typ berechnet werden, indem die TypeEvaluator-Schnittstelle implementiert wird.

Es gibt zwei Animatoren, mit denen Sie die Werte einer Eigenschaft animieren können: ValueAnimator und ObjectAnimator. ValueAnimator berechnet die Animationswerte, erkennt jedoch die spezifischen Objekt oder Eigenschaft, die als Ergebnis animiert wird. Es führt einfach die Berechnungen durch. Sie müssen auf die Aktualisierungen warten und die Daten mit Ihrer eigenen Logik verarbeiten. ObjectAnimator ist eine abgeleitete Klasse von ValueAnimator und ermöglicht es, das zu animierende Objekt und die zu animierende Eigenschaft festzulegen. Außerdem werden damit alle Animationen ausgeführt. Sie geben also dem ObjectAnimator das zu animierende Objekt, die Eigenschaft des Objekts, die sich im Laufe der Zeit ändern soll, und eine Reihe von Werten an, die im Laufe der Zeit auf die Eigenschaft angewendet werden sollen. Anschließend starten Sie die Animation.

Außerdem ermöglicht die Klasse LayoutTransition den automatischen Übergang Animationen für Änderungen, die Sie am Aktivitätslayout vornehmen. Um Übergänge für einen Teil des erstellen Sie ein LayoutTransition-Objekt und legen Sie es auf eine beliebige ViewGroup durch Aufrufen von setLayoutTransition(). Dadurch werden Standardanimationen ausgeführt, wenn der Gruppe Elemente hinzugefügt oder daraus entfernt werden. Wenn du benutzerdefinierte Animationen angeben möchtest, rufe setAnimator() auf dem LayoutTransition auf und gib eine benutzerdefinierte Animator an, z. B. eine ValueAnimator oder ObjectAnimator wie oben beschrieben.

Weitere Informationen finden Sie in der Dokumentation zur Property-Animation. Sie können Sehen Sie sich auch verschiedene Beispiele zur Verwendung der Animations-APIs in der API an. Demos-Anwendung.

Erweitertes UI-Framework

  • Multiple-Choice-Auswahl für ListView und GridView

    Im neuen CHOICE_MODE_MULTIPLE_MODAL-Modus für setChoiceMode() können Nutzer mehrere Elemente auswählen von einem ListView oder GridView. In Kombination mit der Aktionsleiste können Nutzer mehrere Elemente auswählen und dann aus einer Liste von Optionen in der Aktionsleiste die gewünschte Aktion auswählen. Diese ist jetzt in einen Auswahlmodus für Aktionen umgewandelt.

    Wenn Sie die Multiple-Choice-Auswahl aktivieren möchten, rufen Sie setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL) auf und registrieren Sie eine MultiChoiceModeListener bei setMultiChoiceModeListener().

    Wenn der Nutzer lange auf ein Element drückt, wechselt die Aktionsleiste zur Multi-Choice-Option Aktionsmodus. Das System benachrichtigt die MultiChoiceModeListener, wenn Elemente ausgewählt werden, indem onItemCheckedStateChanged() aufgerufen wird.

    Ein Beispiel für eine Auswahl mit mehreren Optionen finden Sie in der Klasse List15.java in der Beispielanwendung „API Demos“.

  • Neue APIs zum Transformieren von Datenansichten

    Mit den neuen APIs können Sie 2D- und 3D-Transformationen ganz einfach auf Ansichten in Ihren Aktivitäten anwenden Layout. Neue Transformationen werden durch eine Reihe von Objekteigenschaften ermöglicht, die unter anderem die Layoutposition, die Ausrichtung und die Transparenz der Ansicht definieren.

    Neue Methoden zum Festlegen der Ansichtseigenschaften sind: setAlpha(), setBottom(), setLeft(), setRight(), setBottom(), setPivotX(), setPivotY(), setRotationX(), setRotationY(), setScaleX(), setScaleY(), setAlpha() und andere.

    Einige Methoden verfügen auch über ein entsprechendes XML-Attribut, das Sie in Ihrem Layout angeben können. -Datei, um eine Standardtransformation anzuwenden. Verfügbare Attribute: translationX, translationY, rotation, rotationX, rotationY, scaleX, scaleY, transformPivotX, transformPivotY und alpha.

    Mit einigen dieser neuen Ansichtseigenschaften in Kombination mit dem neuen Animation Framework (siehe oben) können Sie Ihren Datenansichten ganz einfach ansprechende Animationen hinzufügen. Wenn Sie beispielsweise eine Ansicht um die Y-Achse drehen möchten, geben Sie ObjectAnimator mit View, der Eigenschaft „rotationY“ und den Start- und Endwerten an:

    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();
  • Neue holografische Designs

    Die Standardsystem-Widgets und das Gesamtbild wurden neu gestaltet und um ein neues „holografisches“ Benutzeroberflächen-Design ergänzt. Das System wendet das neue Design unter Verwendung des standardmäßigen Stil- und Designsystems.

    Alle Apps, die auf die Android 3.0-Plattform ausgerichtet sind, indem entweder der Wert android:minSdkVersion oder android:targetSdkVersion auf "11" gesetzt wird, übernehmen standardmäßig das holografische Design. Wenn Ihre Anwendung jedoch auch ein eigenes Design verwendet, wird das holografische Design überschrieben, es sei denn, Sie aktualisieren Ihre Stile so, dass sie das holografische Design übernehmen.

    Um das holografische Design auf einzelne Aktivitäten anzuwenden oder es in Ihr eigenes Design zu übernehmen Definitionen, verwenden Sie eine von mehreren neuen Theme.Holo Themen. Wenn Ihre Anwendung mit einer Android-Version niedriger als 3.0 kompatibel ist und benutzerdefinierte Themen verwendet, sollten Sie ein Thema basierend auf der Plattformversion auswählen.

  • Neue Widgets
    • AdapterViewAnimator

      Basisklasse für eine AdapterView, die beim Wechseln zwischen den Ansichten Animationen ausführt.

    • AdapterViewFlipper

      Einfache ViewAnimator, die zwischen zwei oder mehr Ansichten animiert wird, die ihr hinzugefügt wurden. Es wird jeweils nur ein Kind angezeigt. Bei Bedarf kann sie automatisch zwischen in regelmäßigen Abständen ein einzelnes untergeordnetes Element an.

    • CalendarView

      Nutzer können Datumsangaben in einem Kalender durch Tippen auswählen und durch Scrollen oder Wischen zum gewünschten Datum gelangen. Sie können den Zeitraum konfigurieren, der im Widget verfügbar ist.

    • ListPopupWindow

      Wird an eine Hostansicht angedockt und zeigt eine Liste von Auswahlmöglichkeiten an, z. B. eine Liste mit Vorschlägen, wenn Sie in eine EditText-Ansicht eingeben.

    • NumberPicker

      Ermöglicht es dem Nutzer, eine Zahl aus einem vordefinierten Bereich auszuwählen. Das Widget zeigt eine Eingabe an, und die Nach-oben- und Nach-unten-Taste zum Auswählen einer Zahl. Durch Tippen auf das Eingabefeld kann der Nutzer durch die Werte scrollen oder noch einmal tippen, um den aktuellen Wert direkt zu bearbeiten. Außerdem können Sie Positionen in Strings, sodass die entsprechende Zeichenfolge anstelle des Index angezeigt wird .

    • PopupMenu

      Zeigt ein Menu in einem modalen Pop-up-Fenster an, das an einer Ansicht verankert ist. Das Pop-up wird unter der Ankeransicht angezeigt, wenn genügend Platz vorhanden ist, oder darüber, wenn nicht. Wenn der IME (Soft-Phone Tastatur) sichtbar ist, überdeckt das Pop-up den IME erst, wenn der Nutzer das Symbol .

    • SearchView

      Stellt ein Suchfeld bereit, das Sie konfigurieren können, um Suchanfragen an eine bestimmte und Suchvorschläge anzeigen (wie beim herkömmlichen Suchdialogfeld). Dieses Widget eignet sich besonders gut, um ein Such-Widget in der Aktionsleiste anzubieten. Weitere Informationen finden Sie unter Suchoberfläche erstellen.

    • StackView

      Eine Ansicht, in der die untergeordneten Elemente in einem 3D-Stapel angezeigt werden und Nutzer durch Wischen darüber wischen können wie ein Roolodex.

Grafik

  • Hardwarebeschleunigte 2D-Grafik

    Sie können den OpenGL-Renderer jetzt für Ihre Anwendung aktivieren, indem Sie android:hardwareAccelerated="true" im <application>-Element Ihres Manifestelements oder für einzelne <activity>-Elemente festlegen.

    Dieses Flag hilft Anwendungen, schneller zu zeichnen. Das führt zu flüssigeren Animationen, flüssigerem Scrollen und insgesamt zu einer besseren Leistung und Reaktion auf Nutzerinteraktionen.

  • Unterstützung für Hardware- und Softwareschichten ansehen

    Standardmäßig ist für eine View keine Ebene angegeben. Sie können festlegen, dass der Ansicht entweder durch eine Hardware- oder Softwareebene gestützt werden, die durch die Werte LAYER_TYPE_HARDWARE und LAYER_TYPE_SOFTWARE angegeben wird, unter Verwendung von setLayerType() oder die layerType .

    Eine Hardwareschicht hat eine hardwarespezifische Textur (in der Regel Frame Buffer Objects oder FBO auf OpenGL-Hardware) und sorgt dafür, dass die Ansicht mithilfe des Hardware-Renderings von Android gerendert wird. aber nur, wenn die Hardwarebeschleunigung für die Ansichtshierarchie aktiviert ist. Wenn Hardware Beschleunigung deaktiviert ist, verhalten sich Hardwareschichten genau wie Softwareschichten.

    Eine Softwareebene wird von einer Bitmap unterstützt und bewirkt, dass die Ansicht mit der Software-Rendering-Pipeline von Android gerendert wird, auch wenn die Hardwarebeschleunigung aktiviert ist. Softwareschichten sollten vermieden werden, wenn der betroffene Ansichtsbaum häufig aktualisiert wird. Bei jedem Update muss die Softwareebene neu gerendert werden, was potenziell langsam sein kann.

    Weitere Informationen finden Sie in der Dokumentation zu LAYER_TYPE_HARDWARE und LAYER_TYPE_SOFTWARE.

  • Renderscript-3D-Grafik-Engine

    Renderscript ist ein 3D-Laufzeit-Framework, das sowohl eine API zum Erstellen von 3D-Szenen als auch eine spezielle, plattformunabhängige Shadersprache für maximale Leistung bietet. Mit Renderscript können Sie Grafikvorgänge und die Datenverarbeitung beschleunigen. Renderscript ist eine ideale Möglichkeit, leistungsstarke 3D-Effekte für Anwendungen, Hintergrundbilder, Karussells und mehr.

    Weitere Informationen finden Sie in der Dokumentation 3D-Rendering und ‑Berechnung mit RenderScript.

Medien

  • Video im Zeitraffer

    Camcorder-APIs unterstützen jetzt die Aufzeichnung von Zeitraffervideos. setCaptureRate() legt die Rate fest, mit der die Frames sollten erfasst werden.

  • Texturunterstützung für Bildstreams

    Mit der neuen SurfaceTexture können Sie einen Bildstream als OpenGL ES-Textur erfassen. Wenn Sie setPreviewTexture() für Ihre Camera-Instanz aufrufen, können Sie die SurfaceTexture angeben, auf der die Videowiedergabe oder die Vorschauframes der Kamera gezeichnet werden sollen.

  • HTTP-Livestreaming

    Anwendungen können jetzt eine M3U-Playlist-URL an das Media-Framework übergeben, um eine HTTP-Live-Übertragung zu starten. Streaming-Sitzung. Das Media-Framework unterstützt die meisten HTTP-Live-Streaming-Spezifikationen, einschließlich adaptiver Bitrate. Im Dokument Unterstützte Medienformate finden Sie weitere Informationen dazu, erhalten Sie weitere Informationen.

  • EXIF-Daten

    Die ExifInterface enthält neue Felder für die Blende, den ISO-Wert und die Belichtungszeit.

  • Camcorder-Profile

    Mit der neuen hasProfile()-Methode und mehreren Videoqualitätsprofilen (z. B. QUALITY_1080P, QUALITY_720P, QUALITY_CIF) können Sie die Qualität der Camcorder festlegen.

  • Übertragung digitaler Medien

    Die Plattform unterstützt MTP/PTP (Media/Picture Transfer Protocol) über USB. mit dem Nutzer beliebige Mediendateien ganz einfach zwischen Geräten und auf einen Hostcomputer übertragen können. Entwickler können auf dieser Unterstützung aufbauen und Anwendungen erstellen, mit denen Nutzer umfangreiche Mediendateien, die sie vielleicht auf andere Geräte übertragen oder teilen möchten.

  • Digitale Rechteverwaltung (DRM)

    Neues Expandable-Framework für digitale Rechteverwaltung (Digital Rights Management, DRM) zur Überprüfung und Durchsetzung digitaler Rechte. Sie wird in zwei Architekturschichten implementiert:

    • Eine DRM-Framework-API, die für Anwendungen freigegeben ist und für Standardanwendungen über die Dalvik-VM ausgeführt wird.
    • Ein DRM-Manager in nativem Code, der die Framework-API implementiert und eine Schnittstelle für DRM-Plug-ins bereitstellt, um die Rechteverwaltung und Entschlüsselung für verschiedene DRM-Schemata zu verarbeiten.

    Für Anwendungsentwickler bietet das Framework eine abstrakte, einheitliche API, die die um geschützte Inhalte zu verwalten. Die API verbirgt die Komplexität von DRM-Vorgängen und ermöglicht einheitlicher Betriebsmodus für geschützte und ungeschützte Inhalte sowie für verschiedene digitale Rechteverwaltungssysteme Schemata.

    Für Gerätehersteller, Rechteinhaber und Anbieter digitaler Medien im Internet bietet die Plug-in-API des DRM-Frameworks die Möglichkeit, dem Android-System Unterstützung für ein beliebiges DRM-Schema hinzuzufügen, um den Schutz von Inhalten sicher durchzusetzen.

    Die Vorabversion bietet keine nativen DRM-Plug-ins zur Überprüfung und Durchsetzung digitaler Rechte. Gerätehersteller können jedoch DRM-Plug-ins mit ihren Geräten ausliefern.

    Alle DRM-APIs sind im Paket android.drm enthalten.

Tastaturunterstützung

  • Unterstützung für Steuerung, Meta, Feststelltaste, Num-Taste und Scroll-Taste. Weitere Informationen Siehe META_CTRL_ON und zugehörige Felder.
  • Unterstützung von vollwertigen Desktop-Tastaturen, einschließlich Unterstützung für Tasten wie Esc, Home, Ende, Löschen und weitere. Sie können feststellen, ob Tastenereignisse von einer Volltastatur stammen, indem Sie getKeyboardType() abfragen und nach KeyCharacterMap.FULL suchen.
  • TextView unterstützt jetzt die Tastaturkürzel Strg + X, Strg + C, Strg + V und Strg + A zum Ausschneiden, Kopieren, Einfügen und Auswählen aller Elemente. Unterstützt werden auch Bild-auf-/Bild-ab-Taste, Pos1/Ende und Textauswahl über die Tastatur.
  • KeyEvent fügt mehrere neue Methoden hinzu, mit denen sich der Status der Tastenmodifikatoren einfacher und konsistenter prüfen lässt. Siehe hasModifiers(int), hasNoModifiers(), metaStateHasModifiers() und metaStateHasNoModifiers().
  • Anwendungen können benutzerdefinierte Tastenkürzel implementieren, indem sie Activity, Dialog oder View als Unterklasse definieren und onKeyShortcut() implementieren. Das Framework nennt diese Methode, Ein Schlüssel wird mit der Strg-Taste kombiniert. Wenn Sie ein Optionsmenü erstellen, können Sie Tastenkürzel registrieren, indem Sie für jedes <item>-Element (oder mit setShortcut()) das Attribut android:alphabeticShortcut oder android:numericShortcut festlegen.
  • Android 3.0 enthält ein neues Gerät vom Typ „virtuelle Tastatur“ mit der ID KeyCharacterMap.VIRTUAL_KEYBOARD. Die virtuelle Tastatur hat eine US-amerikanische Tastaturbelegung im Desktop-Stil, die sich zum Erstellen von Schlüsselereignissen zum Testen der Eingabe eignet.

Touch-Ereignisse aufteilen

Bisher konnten nur in einer einzigen Ansicht Touch-Ereignisse verarbeitet werden. Android 3.0 unterstützt die Aufteilung von Touch-Ereignissen über Ansichten und sogar Fenster hinweg, sodass verschiedene Ansichten gleichzeitige Touch-Ereignisse.

„Geteilte Touch-Gesten“ ist standardmäßig aktiviert, wenn eine App auf die App ausgerichtet ist Android 3.0 Das heißt, wenn die Anwendung den Wert des Attributs android:minSdkVersion oder android:targetSdkVersion auf "11" festgelegt hat.

Mit den folgenden Properties können Sie jedoch Touch-Ereignisse in bestimmten Ansichtsgruppen und in Fenstern deaktivieren.

  • Mit dem Attribut android:splitMotionEvents für Ansichtsgruppen können Sie Split-Touch-Ereignisse deaktivieren, die zwischen untergeordneten Ansichten in einem Layout auftreten. Beispiel:
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>

    So können untergeordnete Ansichten im linearen Layout keine Touch-Ereignisse aufteilen – nur eine Ansicht kann jeweils Touch-Ereignisse empfangen.

  • Stileigenschaft android:windowEnableSplitTouch ermöglicht es dir, das Teilen von Touch-Events über Fenster hinweg zu deaktivieren, indem du sie auf ein Design für die Aktivität anwendest oder der gesamten Anwendung. Beispiel:
    <style name="NoSplitMotionEvents" parent="android:Theme.Holo">
        <item name="android:windowEnableSplitTouch">false</item>
        ...
    </style>

    Wenn dieses Design auf ein <activity>- oder <application>-Element angewendet wird, Nur Touch-Events im aktuellen Aktivitätsfenster werden akzeptiert. Wenn Sie beispielsweise Split-Touch-Ereignisse für Fenster deaktivieren, kann die Systemleiste keine Touch-Ereignisse gleichzeitig mit der Aktivität empfangen. Dies hat keinen Einfluss darauf, ob die Sicht innerhalb der Aktivität geteilt werden kann. -Ereignissen: Die Aktivität kann Touch-Events dennoch auf mehrere Ansichten aufteilen.

    Weitere Informationen zum Erstellen eines Designs finden Sie unter Stile und Designs anwenden.

WebKit

  • Neue WebViewFragment-Klasse zum Erstellen eines Fragments, das aus einem WebView besteht.
  • Neue WebSettings-Methoden:
    • Mit setDisplayZoomControls() können Sie Elemente ausblenden die Zoomsteuerung auf dem Bildschirm, während der Nutzer weiterhin mit Fingerbewegungen zoomen kann (setBuiltInZoomControls() muss für true.
    • Mit der neuen WebSettings-Methode setEnableSmoothTransition() können Sie , um beim Schwenken und Zoomen gleichmäßige Übergänge zu ermöglichen. Wenn diese Option aktiviert ist, wählt WebView eine Lösung aus, um die Leistung zu maximieren. Beispielsweise werden die Inhalte der WebView während der Umstellung möglicherweise nicht aktualisiert.
  • Neue WebView-Methoden:
    • onPause()-Callback zum Pausieren der Verarbeitung die mit dem WebView verknüpft sind, wenn dieses ausgeblendet wird. Dies ist nützlich, um unnötige CPU- oder Netzwerkverkehr, wenn WebView nicht im Vordergrund ausgeführt wird.
    • onResume()-Callback, um die Verarbeitung fortzusetzen mit dem WebView verknüpft, das im onPause() pausiert wurde.
    • Mit saveWebArchive() können Sie Folgendes speichern: in der aktuellen Ansicht als Webarchiv auf dem Gerät gespeichert sind.
    • showFindDialog() initiiert eine Textsuche in zur aktuellen Ansicht wechseln.

Browser

Die Browseranwendung bietet die folgenden Funktionen zur Unterstützung von Webanwendungen:

  • Medienaufnahme

    Gemäß der Definition in HTML Media Capture ermöglicht der Browser den Zugriff auf Audio-, Bild- und Videoaufnahmen Funktionen des Geräts. Im folgenden HTML-Code kann der Nutzer beispielsweise ein Foto aufnehmen, das hochgeladen werden soll:

    <input type="file" accept="image/*;capture=camera" />

    Wenn der Parameter capture=camera ausgeschlossen wird, kann der Nutzer entweder ein neues Bild mit der Kamera aufnehmen oder eines auf dem Gerät auswählen (z. B. aus der Galerie-App).

  • Geräteorientierung

    Gemäß der Definition im Ereignis für die Geräteausrichtung ermöglicht der Browser, dass Webanwendungen auf DOM-Ereignisse warten, die Informationen liefern, zur physischen Ausrichtung und Bewegung des Geräts.

    Die Geräteausrichtung wird mit den X-, Y- und Z-Achsen in Grad angegeben. Die Bewegung wird mit Daten zur Beschleunigung und Drehrate ausgedrückt. Eine Webseite kann sich zur Orientierung registrieren Ereignisse durch Aufrufen von window.addEventListener mit dem Ereignistyp "deviceorientation" und sich für Bewegungsereignisse registrieren, indem Sie den Ereignistyp "devicemotion" registrieren.

  • CSS-3D-Transformationen

    Gemäß Definition in der CSS 3D-Transformation Module-Spezifikation ermöglicht der Browser die Umwandlung von CSS-Elementen in drei Dimensionen.

JSON-Dienstprogramme

Mit den neuen Klassen JsonReader und JsonWriter können Sie JSON-Streams lesen und schreiben. Die neuen APIs ergänzen die org.json-Klassen, mit denen ein Dokument im Arbeitsspeicher manipuliert wird.

Sie können eine Instanz von JsonReader erstellen, indem Sie folgenden Befehl aufrufen: und übergibt den InputStreamReader, der den JSON-String einspeist. Rufen Sie dann beginObject() auf, um mit dem Lesen eines Objekts zu beginnen, lesen Sie einen Schlüsselnamen mit nextName() und lesen Sie den Wert mithilfe von Methoden entsprechend dem Typ, z. B. nextString() und nextInt(). Fahren Sie so fort, solange hasNext() wahr ist.

Sie können eine Instanz von JsonWriter erstellen, indem Sie deren Konstruktor aufrufen und und übergibt das entsprechende OutputStreamWriter. Schreiben Sie dann die JSON-Daten ähnlich wie beim Reader. Verwenden Sie name(), um einen Attributnamen hinzuzufügen, und eine geeignete value()-Methode, um den entsprechenden Wert hinzuzufügen.

Diese Klassen sind standardmäßig strikt. Das setLenient() in jeder Klasse konfiguriert sie so, dass sie liberaler sind, was sie akzeptieren. Dieser tolerante Parsemodus ist auch mit dem Standard-Parser von org.json kompatibel.

Konstanten für neue Funktionen

Mit dem Manifest-Element <uses-feature> sollten Sie externe Entitäten (z. B. Google Play) über die Hardware- und Softwarefunktionen informieren, von denen Ihre App abhängt. In diesem Release fügt Android folgenden neuen Konstanten, die Anwendungen mit diesem Element deklarieren können:

  • "android.hardware.faketouch"

    Bei der Deklaration bedeutet dies, dass die App mit einem Gerät kompatibel ist, das ein emulierten Touchscreen (oder besser). Ein Gerät mit emuliertem Touchscreen ermöglicht eine Nutzereingabe ein System, das Touchscreens emuliert, Funktionen. Ein Beispiel für ein solches Eingabesystem ist eine Maus oder eine Fernbedienung, die einen Cursor auf dem Bildschirm steuert. Solche Eingabesysteme unterstützen grundlegende Touch-Ereignisse wie „Nach-unten-klicken“, „Nach-oben-klicken“ und „Ziehen“. Kompliziertere Eingabearten wie Touch-Gesten oder Wischbewegungen sind auf Geräten mit Faketouch-Technologie jedoch möglicherweise schwieriger oder gar nicht möglich. Multitouch-Gesten sind definitiv nicht möglich.

    Wenn für Ihre Anwendung keine komplizierten Touch-Gesten erforderlich sind und Sie nicht möchten, dass Ihre Anwendung von Geräten mit einem emulierten Touchscreen herausgefiltert wird, sollten Sie "android.hardware.faketouch" mit einem <uses-feature>-Element deklarieren. Auf diese Weise ist Ihre App für die meisten Gerätetypen verfügbar, auch solche, die nur eine emulierte Touchscreen-Eingabe ermöglichen.

    Alle Geräte mit Touchscreen unterstützen auch "android.hardware.faketouch", weil Touchscreen-Funktionen sind eine Obermenge von Fake-Touch-Funktionen. Wenn Sie also keinen Touchscreen benötigen, sollten Sie ein <uses-feature>-Element für Faketouch hinzufügen.

Neue Berechtigungen

  • "android.permission.BIND_REMOTEVIEWS"

    Diese muss im Manifest-Element <service> als erforderliche Berechtigung für eine Implementierung von RemoteViewsService deklariert werden. Wenn beispielsweise beim Erstellen eines App-Widgets, das mit RemoteViewsService kann der Manifesteintrag so aussehen:

    <service android:name=".widget.WidgetService"
        android:exported="false"
        android:permission="android.permission.BIND_REMOTEVIEWS" />

Neue Plattformtechnologien

  • Speicher
    • Unterstützung des ext4-Dateisystems für integrierten eMMC-Speicher
    • FUSE-Dateisystem zur Unterstützung von MTP-Geräten.
    • Unterstützung des USB-Host-Modus für Tastaturen und USB-Hubs
    • Unterstützung für MTP/PTP
  • Linux-Kernel
    • Upgrade auf 2.6.36
  • Dalvik-VM
    • Neuer Code zur Unterstützung und Optimierung von SMP
    • Verschiedene Verbesserungen an der JIT-Infrastruktur
    • Verbesserungen bei der Speicherbereinigung:
      • Für SMP optimiert
      • Unterstützung größerer Heap-Größen
      • Einheitliche Verarbeitung von Bitmaps und Byte-Zwischenspeichern
  • Dalvik-Kernbibliotheken
    • Neue, viel schnellere Implementierung von NIO (moderne E/A-Bibliothek)
    • Verbesserte Ausnahmemeldungen
    • Korrektheits- und Leistungskorrekturen im gesamten

Bericht zu API-Unterschieden

Eine detaillierte Übersicht über alle API-Änderungen in Android 3.0 (API-Level 11) finden Sie im API-Unterschiedsbericht.

API-Level

Die Android 3.0-Plattform bietet eine aktualisierte Version der Framework-API. Die Android 3.0 API wird eine ganzzahlige ID zugewiesen, 11, also die im System selbst gespeichert sind. Anhand dieser Kennung, der sogenannten API-Ebene, kann das System vor der Installation einer Anwendung korrekt feststellen, ob sie mit dem System kompatibel ist.

Wenn Sie in Ihrer Anwendung APIs verwenden möchten, die in Android 3.0 eingeführt wurden, müssen Sie die Anwendung mit der Android-Bibliothek kompilieren, die in der Android 3.0 SDK-Plattform bereitgestellt wird. Je nach Bedarf müssen Sie dem <uses-sdk>-Element im Manifest der Anwendung möglicherweise auch ein android:minSdkVersion="11"-Attribut hinzufügen. Falls Ihre App nur für Android 2.3 und höher entwickelt wurde, Durch das Deklarieren des Attributs wird verhindert, dass die Anwendung früher installiert wird. Versionen der Plattform.

Weitere Informationen finden Sie unter Was ist eine API? Stufe?