APIs unter Android 3.0

API-Level: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 umfasst keine externen Bibliotheken.

Für Entwickler ist die Android 3.0-Plattform als herunterladbare Komponente für das Android SDK. 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 Fragments fragmentiert, müssen Sie die Klasse Fragment erweitern und mehrere Lebenszyklus- -Rückrufmethoden, ähnlich wie Activity. Sie können dann mehrere in einer einzelnen Aktivität fragmentiert, um eine Benutzeroberfläche mit mehreren Bereichen zu erstellen, verwaltet der Bereich seinen eigenen Lebenszyklus und seine eigenen Nutzereingaben.

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

Zusätzlich:

  • Fragmente sind eigenständig 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 zum Aktionsleiste der Aktivität (im Folgenden erörtert)

Zum Verwalten der Fragmente in Ihrer Aktivität müssen Sie die FragmentManager verwenden. Diese bietet verschiedene APIs für die Interaktion mit Fragmenten, z. B. da sie Fragmente in der Aktivität finden und aus dem Back Stack entfernen, um ihre vorherigen Status.

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 den Änderungen, die Sie für die Transaktion vornehmen möchten, müssen Sie commit() aufrufen und das System wendet die Fragmenttransaktion auf der Aktivität.

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 Anwendungslogo in der linken Ecke und bietet eine neue Benutzeroberfläche für Elemente im Optionen: Darüber hinaus enthält der Die Aktionsleiste bietet Ihnen 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 genug Platz ist, zeigt das Menü wird 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üge in der XML-Deklaration für den Artikel auf der Speisekarte das Attribut android:actionViewLayout hinzu mit einer Layout-Ressource oder dem Attribut android:actionViewClass mit dem Klassennamen einer Widget. 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 Anwendungslogo wird automatisch die android.R.id.home-ID zugewiesen. Das System leitet den onOptionsItemSelected()-Callback deiner Aktivität weiter, wenn du ihn berührst. Antworten Sie einfach in Ihrem Rückruf auf diese ID. -Methode zum Ausführen einer Aktion, z. B. zum Aufrufen der Startseite Ihrer Anwendung Aktivitäten.

    Um das Symbol durch ein Logo zu ersetzen, geben Sie in der Manifestdatei Ihr Anwendungslogo mit dem android:logo und rufen Sie dann in Ihrer Aktivität setDisplayUseLogoEnabled(true) 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. Mehrere Beispiele sind auch in der API Demos anwenden.

Systemzwischenablage

Anwendungen können jetzt Daten (über den reinen Text hinaus) in das und aus dem gesamten System kopieren und einfügen Zwischenablage öffnen. Bei diesen Daten kann es sich um Nur-Text, einen URI oder einen Intent handeln.

Indem Sie dem System über einen Contentanbieter Zugriff auf die Daten gewähren, die der Nutzer kopieren soll, können Nutzende komplexe Inhalte (wie 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 das globale ClipboardManager-Objekt ab. indem du getSystemService(CLIPBOARD_SERVICE) anrufst.

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.

Übergeben Sie das ClipData-Objekt in Ihrer Instanz von ClipboardManager an setPrimaryClip(), um es der Zwischenablage hinzuzufügen.

Anschließend kannst du eine Datei aus der Zwischenablage lesen (um sie einzufügen), indem du getPrimaryClip() im ClipboardManager aufrufst. Die Verarbeitung der empfangenen ClipData kann Sie müssen sicher sein, dass Sie den Datentyp in der Zwischenablage wirklich verarbeiten können, bevor Sie versuchen, es 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 Drag-Aktionen definiert ist, wobei jede definiert durch ein DragEvent-Objekt wie ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED und ACTION_DROP. Jede Ansicht, die an einem Drag teilnehmen möchte auf diese Aktionen warten kann.

Wenn du Inhalte in deiner Aktivität ziehen möchtest, rufe startDrag() auf auf einem View, wobei ein ClipData-Objekt bereitgestellt wird, das die zu ziehenden Daten, ein View.DragShadowBuilder, um den „Schatten“ die Nutzer beim Ziehen unter ihren Fingern sehen, und eine Object, die geteilt werden kann Informationen über das Drag-Objekt mit möglichen Ansichten des Objekts

Registrieren Sie die Ansicht, um ein Drag-Objekt in einem View zu akzeptieren (also das „drop“ erhalten). mit einem OnDragListener durch Aufrufen von setOnDragListener(). Wenn ein Drag-Ereignis in der Ansicht 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 Empfängeransicht kann den an onDragEvent() übermittelten Ereignistyp durch Aufrufen von getAction() auf der DragEvent abfragen.

Hinweis:Ein Drag-Event kann zwar ein ClipData-Objekt enthalten, dies hat jedoch nichts mit der Systemzwischenablage zu tun. Per Drag-and-drop Daten, die per Drag-and-drop eingefügt werden, nie in die Systemzwischenablage.

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

App-Widgets

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

Noch wichtiger ist, dass Sie mit dem neuen RemoteViewsService eine App erstellen können. Widgets mit Sammlungen mit Widgets wie GridView, ListView und StackView, die auf Remote-Daten basieren, 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. Die Das Feld previewImage gibt eine Vorschau dessen an, Das App-Widget sieht aus wie und wird dem Nutzer in der Widget-Auswahl angezeigt. Wenn dieses Feld nicht bereitgestellt wird, wird das Symbol des App-Widgets für die Vorschau verwendet.

Zur Erstellung eines Vorschaubilds für dein App-Widget (muss im Feld previewImage angegeben werden) enthält der Android-Emulator einen App namens „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 ihn 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 den Status mit mehr Inhalten zu unterstützen Benachrichtigungen in der Leiste. Mit der neuen Notification.Builder-Klasse können Sie Notification-Objekte erstellen.

Neue Funktionen:

  • Unterstützung eines großen Symbols in der Benachrichtigung mithilfe von 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. Beispiel: Benachrichtigung kann 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 es in Kombination mit UI-Komponenten wie Ansichten und Fragmenten, 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. Weitere Informationen Beispielcode mit loaders im LoaderCursor und LoaderThrottle-Beispiele.

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 A2DP oder HEADSET aufrufen und eine BluetoothProfile.ServiceListener erhalten, Rückrufe, wenn eine Verbindung zum Bluetooth-Client hergestellt oder getrennt wird

Animationsframework

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 Frame-Aktualisierung

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 und Sie müssen auf Aktualisierungen warten und die Daten mit Ihrer eigenen Logik verarbeiten. ObjectAnimator ist eine abgeleitete Klasse von ValueAnimator und können Sie das Objekt und die Eigenschaft auf Animieren setzen. Darüber hinaus übernimmt das Programm alle Animationsarbeiten. Sie weisen dem ObjectAnimator also das zu animierende Objekt zu, Eigenschaft des Objekts, die sich im Laufe der Zeit ändern soll, und eine Reihe von Werten, die auf die Eigenschaft angewendet werden soll und starten Sie dann 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(). Dies bewirkt, dass Standardeinstellungen Animationen, die immer dann ausgeführt werden, wenn Elemente zur Gruppe hinzugefügt oder daraus entfernt werden. Um benutzerdefinierte Animationen erstellen, setAnimator() am LayoutTransition aufrufen und eine benutzerdefinierte Animator angeben, z. B. 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. Verwendung in in Verbindung mit der Aktionsleiste können Nutzer mehrere Elemente auswählen und dann die gewünschte Aktion auswählen. in der Aktionsleiste eine Auswahl treffen. Aktionsmodus).

    Um die Multiple-Choice-Auswahl zu aktivieren, rufen Sie setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL) auf und registrieren Sie ein MultiChoiceModeListener mit setMultiChoiceModeListener().

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

    Ein Beispiel für eine Multiple-Choice-Auswahl finden Sie in der List15. Java in der API Demos-Beispielanwendung.

  • Neue APIs zum Transformieren von Ansichten

    Mit den neuen APIs können Sie 2D- und 3D-Transformationen ganz einfach auf Ansichten in Ihren Aktivitäten anwenden Layout. Neue Transformationen werden mit einer Reihe von Objekteigenschaften möglich, die die Sichtbarkeit der Ansicht definieren Layoutposition, Ausrichtung, Transparenz usw.

    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.

    Die Verwendung einiger dieser neuen Ansichtseigenschaften in Kombination mit dem neuen Animations-Framework (siehe können Sie ganz einfach tolle Animationen auf Ihre Ansichten anwenden. Um z. B. eine Ansicht auf seiner Y-Achse geben Sie ObjectAnimator mit dem View, der "rotationY", an sowie die Start- und Endwerte:

    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 standardmäßigen System-Widgets und das Gesamtdesign wurden neu gestaltet und enthalten eine neue "holographisch" Design der Benutzeroberfläche. Das System wendet das neue Design unter Verwendung des standardmäßigen Stil- und Designsystems.

    Jede App, die auf die Android 3.0-Plattform ausgerichtet ist, indem Sie entweder die android:minSdkVersion oder android:targetSdkVersion auf "11" setzen, wird standardmäßig das holografische Design übernommen. Wenn Ihre Anwendung jedoch auch ein eigenes Design anwendet, überschreibt dieses holografischen Designs, es sei denn, Sie aktualisieren Ihre Stile so, dass das holografische Design übernommen wird.

    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. Falls Ihre App mit einer älteren Android-Version als 3.0 kompatibel ist und benutzerdefinierten Designs, sollten Sie ein Design basierend auf der Plattform auswählen, .

  • Neue Widgets <ph type="x-smartling-placeholder">
      </ph>
    • AdapterViewAnimator

      Basisklasse für eine AdapterView, die beim Wechsel Animationen ausführt zwischen ihren Ansichten.

    • AdapterViewFlipper

      Einfaches ViewAnimator, das zwischen zwei oder mehr Ansichten animiert, hinzugefügt wurde. 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 durch Tippen auf das Datum Daten aus einem Kalender auswählen und scrollen oder ziehen Kalender auf ein gewünschtes Datum zu setzen. Sie können den Zeitraum konfigurieren, der im Widget verfügbar ist.

    • ListPopupWindow

      Verankert sich in einer Hostansicht und zeigt eine Liste mit Auswahlmöglichkeiten an, z. B. für eine Liste mit bei der Eingabe in eine EditText-Ansicht.

    • NumberPicker

      Der Nutzer kann eine Zahl aus einem vordefinierten Bereich auswählen. Das Widget zeigt eine Eingabe an, und die Nach-oben- und Nach-unten-Taste zum Auswählen einer Zahl. Über das Eingabefeld können Nutzer Scrollen Sie durch die Werte oder tippen Sie erneut, 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. Die Pop-up-Fenster unter der Ankeransicht erscheint, wenn Platz vorhanden ist, oder darüber. 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 Dieses Widget ist besonders nützlich, wenn Sie in der Aktionsleiste ein Such-Widget anbieten möchten. Weitere Informationen Siehe 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

    Du kannst jetzt den OpenGL-Renderer für deine App aktivieren, indem du android:hardwareAccelerated="true" im <application> deines Manifestelements festlegst oder für einzelne <activity> Elemente.

    Mit diesem Flag können Anwendungen schneller zeichnen. Das führt zu flüssigeren Animationen, flüssigeres Scrollen und eine insgesamt bessere Leistung und Reaktion auf Nutzerinteraktionen.

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

    Standardmäßig ist für 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 durch eine Bitmap gestützt und bewirkt, dass die Ansicht mithilfe der Software-Rendering-Pipeline, auch wenn die Hardwarebeschleunigung aktiviert ist. Softwareebenen sollten werden vermieden, wenn der betroffene Ansichtsbaum häufig aktualisiert wird. Bei jeder Aktualisierung muss die Softwareebene, die 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 bietet als auch als spezielle, plattformunabhängige Shader-Sprache, um maximale Leistung zu erzielen. Mit Renderscript Grafiken und Datenverarbeitung beschleunigen. Renderscript ist eine ideale Möglichkeit, leistungsstarke 3D-Effekte für Anwendungen, Hintergrundbilder, Karussells und mehr.

    Weitere Informationen finden Sie im Artikel 3D-Rendering und -Berechnung mit Renderscript-Dokumentation.

Medien

  • Video im Zeitraffer

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

  • Texturunterstützung für Bildstreams

    Mit dem neuen SurfaceTexture kannst du einen Bildstream als OpenGL ES erfassen Textur. Durch einen Anruf bei setPreviewTexture() für Ihr Camera können Sie die SurfaceTexture angeben, auf die die Videowiedergabe oder Vorschau-Frames aus dem Kamera.

  • 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

    ExifInterface enthält neue Felder für Blende, ISO und Belichtung .

  • Camcorder-Profile

    Neue hasProfile()-Methode und mehrere Videos Mit Qualitätsprofilen (z. B. QUALITY_1080P, QUALITY_720P und QUALITY_CIF) kannst du deinen Camcorder bestimmen. Qualitätsoptionen.

  • Ü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

    Neues Expandable-Framework für digitale Rechteverwaltung (Digital Rights Management, DRM) zur Überprüfung und Durchsetzung digitaler Rechte. Die Implementierung erfolgt in zwei Architekturebenen:

    • Eine DRM-Framework-API, die Anwendungen zugänglich ist und während der gesamten Dauer durch die Dalvik-VM ausgeführt wird Standardanwendungen.
    • Ein Manager für native Code-DRM, der die Framework API implementiert und eine Schnittstelle für die digitale Rechteverwaltung bereitstellt Plug-ins für die Rechteverwaltung und -entschlüsselung bei verschiedenen DRM-Schemata.

    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.

    Der DRM-Schutz für Gerätehersteller, Rechteinhaber und Anbieter digitaler Medien im Internet Framework-Plug-in-API eine Möglichkeit, Unterstützung für ein DRM-Schema Ihrer Wahl in der Android-System zur sicheren Erzwingung des Inhaltsschutzes

    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 Schlüsselereignisse von einer vollständigen Tastatur stammen, getKeyboardType() wird abgefragt und nach KeyCharacterMap.FULL gesucht
  • In TextView werden jetzt tastaturbasierte Dateien zum Ausschneiden, Kopieren und mit den Tastenkombination Strg+X, Strg+C, Strg+V und Strg+A. Unterstützt werden auch Bild-auf-/Bild-ab-Taste, Pos1/Ende und Textauswahl über die Tastatur.
  • KeyEvent fügt mehrere neue Methoden hinzu, um das Prüfen des Schlüssels zu vereinfachen des Modifikators korrekt und einheitlich. Siehe hasModifiers(int), hasNoModifiers(), metaStateHasModifiers(), metaStateHasNoModifiers().
  • Anwendungen können benutzerdefinierte Tastenkombinationen implementieren, indem Sie Activity, Dialog oder View ableiten und onKeyShortcut(). Das Framework nennt diese Methode Ein Schlüssel wird mit der Strg-Taste kombiniert. Wenn Sie ein Optionsmenü erstellen, können Sie die Tastatur registrieren Tastenkombinationen aufrufen, indem Sie für jede <item> entweder das Attribut android:alphabeticShortcut oder android:numericShortcut festlegen -Element (oder mit setShortcut()) ab.
  • Android 3.0 enthält eine neue "Bildschirmtastatur" Gerät mit der ID KeyCharacterMap.VIRTUAL_KEYBOARD Das virtuelle Tastatur verfügt über eine Tastaturbelegung für die USA, die sich beim Zusammenführen von Schlüsselereignissen für Tests eignet. Eingabe.

Geteilte Touch-Ereignisse

Bisher konnten Touch-Events auf einmal nur in einer einzigen Ansicht angenommen 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 entweder den android:minSdkVersion oder android:targetSdkVersion den Wert des Attributs auf "11" fest.

Mit den folgenden Eigenschaften können Sie jedoch das Teilen von Berührungsereignissen auf Ansichten innerhalb von Ansichten deaktivieren. für bestimmte Datenansichtsgruppen und fensterübergreifend.

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

    Auf diese Weise können untergeordnete Ansichten im linearen Layout keine Touch-Ereignisse aufteilen, sondern nur eine Ansicht. Touch-Ereignisse gleichzeitig 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 die Aufteilung Fensterübergreifende Touch-Ereignisse verwenden, kann die Systemleiste keine Berührungsereignisse gleichzeitig mit der Aktivitäten. 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 von Designs finden Sie unter Stile und Designs anwenden.

WebKit

  • Neue WebViewFragment-Klasse zum Erstellen eines Fragments, das aus einem WebView.
  • Neue WebSettings-Methoden: <ph type="x-smartling-placeholder">
      </ph>
    • 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 (z. B. wird der Content der WebView während der Übergang).
  • Neue WebView-Methoden: <ph type="x-smartling-placeholder">
      </ph>
    • 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. Der folgende HTML-Code bietet dem Nutzer beispielsweise eine Eingabe, Foto zum Hochladen aufnehmen:

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

    Durch Ausschließen des capture=camera-Parameters hat der Nutzer die Möglichkeit, ein ein neues Bild mit der Kamera erstellen oder ein Bild auf dem Gerät auswählen (z. B. in der Galerie-App).

  • Geräteausrichtung

    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 durch die x-, y- und z-Achse in Grad ausgedrückt. Die Bewegung ist mit Daten zu Beschleunigung und Rotationsrate ausgedrückt. Eine Webseite kann sich zur Orientierung registrieren 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

Die neuen Kurse „JsonReader“ und „JsonWriter“ helfen Ihnen JSON-Streams lesen und schreiben. Die neuen APIs ergänzen die org.json-Klassen, die die ein Dokument im Speicher.

Sie können eine Instanz von JsonReader erstellen, indem Sie folgenden Befehl aufrufen: und übergibt den InputStreamReader, der den JSON-String einspeist. Beginnen Sie dann mit dem Lesen eines Objekts durch Aufrufen von beginObject(), lesen Sie Schlüsselname mit nextName(), Wert mit Methoden lesen je nach Typ, wie z. B. nextString() und nextInt(), und fahren Sie fort, solange hasNext() wahr ist.

Sie können eine Instanz von JsonWriter erstellen, indem Sie deren Konstruktor aufrufen und und übergibt das entsprechende OutputStreamWriter. Dann schreiben Sie die JSON-Daten so, ähnlich wie im Reader, wobei name() zum Hinzufügen eines Attributnamens verwendet wird und eine geeignete value()-Methode, um den entsprechenden Wert.

Diese Klassen sind standardmäßig strikt. Das setLenient() in jeder Klasse konfiguriert sie so, dass sie liberaler sind, was sie akzeptieren. Diese Nachsichtige Der Parser-Modus ist auch mit dem Standardparser des org.json kompatibel.

Konstanten für neue Funktionen

Die <uses-feature> Das Manfest-Element sollte verwendet werden, um externe Stellen (wie Google Play) über die Menge Hardware- und Softwarefunktionen, von denen Ihre Anwendung abhängig ist. In diesem Release fügt Android folgenden neuen Konstanten, die Anwendungen mit diesem Element deklarieren können:

  • "android.hardware.faketouch"

    Wenn angegeben, 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 Fernbedienung, die ein eingeblendet. Diese Eingabesysteme unterstützen grundlegende Touch-Ereignisse wie "Nach unten klicken", "Nach oben klicken" und "Ziehen". Kompliziertere Eingabetypen wie Gesten, Flings usw. können jedoch schwieriger oder auf fake-Touch-Geräten nicht möglich (und Multi-Touch-Gesten sind definitiv nicht möglich).

    Wenn für Ihre App keine komplizierten Gesten erforderlich sind und Sie nicht aus Geräten mit emuliertem Touchscreen filtern, sollte "android.hardware.faketouch" mit einem <uses-feature> deklarieren -Elements. 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. Es sei denn, Sie benötigen Touchscreen haben, sollten Sie einen <uses-feature> -Element für FakeTouch.

Neue Berechtigungen

  • "android.permission.BIND_REMOTEVIEWS"

    Dies muss im <service>-Manifest als erforderliche Berechtigung deklariert werden -Element für die Implementierung von RemoteViewsService. 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 <ph type="x-smartling-placeholder">
      </ph>
    • Unterstützung des ext4-Dateisystems zur Aktivierung des Onboarding-eMMC-Speichers.
    • FUSE-Dateisystem zur Unterstützung von MTP-Geräten.
    • Unterstützung des USB-Hostmodus zur Unterstützung von Tastaturen und USB-Hubs.
    • Unterstützung für MTP/PTP
  • Linux-Kernel <ph type="x-smartling-placeholder">
      </ph>
    • Upgrade auf Version 2.6.36
  • Dalvik-VM <ph type="x-smartling-placeholder">
      </ph>
    • Neuer Code zur Unterstützung und Optimierung für SMP
    • Verschiedene Verbesserungen der JIT-Infrastruktur
    • Verbesserungen bei der automatischen Speicherbereinigung: <ph type="x-smartling-placeholder">
        </ph>
      • Auf SMP abgestimmt
      • Unterstützung größerer Heap-Größen
      • Einheitliche Verarbeitung von Bitmaps und Byte-Zwischenspeichern
  • Dalvik-Kernbibliotheken <ph type="x-smartling-placeholder">
      </ph>
    • Neue, viel schnellere Implementierung von NIO (moderne E/A-Bibliothek)
    • Verbesserte Ausnahmemeldungen
    • Korrektheits- und Leistungskorrekturen im gesamten

Bericht zu API-Unterschieden

Eine detaillierte Ansicht aller API-Änderungen in Android 3.0 (API-Level) 11) sehen Sie sich den Bericht zu API-Unterschieden an.

API-Ebene

Die Android 3.0-Plattform liefert eine aktualisierte Version der die Framework-API. Die Android 3.0 API wird eine ganzzahlige ID zugewiesen, 11, also die im System selbst gespeichert sind. Diese Kennung, die „API-Ebene“ genannt wird, ermöglicht um zu ermitteln, ob eine App mit vor der Installation der Anwendung.

Um in Android 3.0 eingeführte APIs in Ihrer App zu verwenden, müssen Sie die Anwendung anhand der Android-Bibliothek kompilieren, die im die Android 3.0 SDK-Plattform. Je nach Ihren Anforderungen können Sie muss auch ein android:minSdkVersion="11"-Element <uses-sdk>-Element im Feld Manifests. 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?