SystemUIOverlayWindow-Codelab

Auf dieser Seite wird erläutert, wie Sie eine Ansicht im SystemUIOverlayWindow erstellen.

Bevor du anfängst

Für den unten bereitgestellten Inhalt wird davon ausgegangen, dass Sie die folgenden Artikel zur System-Benutzeroberfläche gelesen haben:

Dieser Artikel:

  • Setzt voraus, dass Sie mit Anwendungsfällen für das Android Automotive OS und dessen SystemUIOverlayWindow vertraut sind.
  • Stellt Beispiele für bestimmte Unterklassen des OverlayViewController bereit.
  • Behandelt keine Unterklassen von OverlayViewController .
  • Erklärt nicht, wie man Android für die Entwicklung einrichtet.
  • Beschreibt nicht jede Option, die in Basisklassen überschrieben werden kann. Vielmehr werden nur diejenigen beschrieben, die zum Einrichten einer Grundansicht erforderlich sind.

Vervollständigen Sie das Codelab

Schritt 1: Erstellen Sie ein Layout für den OverlayViewController

Erstellen Sie eine Datei mit dem Namen frameworks/base/packages/CarSystemUI/res/layout/codelab_layout.xml die Folgendes enthält:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/codelab_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="Code Lab View!"
            android:color="@*android:color/car_accent"
            android:textStyle="italic"
            android:textSize="34sp"/>
        <Button
            android:id="@+id/codelab_button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:text="Hide!"
            android:background="@*android:color/car_accent"/>
    </LinearLayout>
</FrameLayout>

Dieses Layout erstellt die folgende Ansicht:

OverlayViewController
Abbildung 1. OverlayViewController

Schritt 2: Fügen Sie einen ViewStub zu SysUIOverlayWindow hinzu

Fügen Sie die Ansicht zu Ihrem Fenster hinzu, indem Sie einen ViewStub zum SystemUIOverlayWindow hinzufügen.

Fügen Sie den folgenden Code zu frameworks/base/packages/CarSystemUI/res/layout/sysui_overlay_window.xml im Stammverzeichnis FrameLayout hinzu:

<ViewStub android:id="@+id/codelab_stub"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:layout="@layout/codelab_layout"/>

Die Reihenfolge, in der ViewStubs im Stamm FrameLayout definiert sind, definiert die Z-Reihenfolge der Ansichten im Fenster. Da dieses Codelab keine Layer-Ansichten beinhaltet, können Sie das Code-Snippet an einer beliebigen Stelle im Stamm- FrameLayout hinzufügen.

Schritt 3: Erstellen Sie einen OverlayViewController

Um angezeigt und ausgeblendet zu werden, muss das neue Layout mit einem OverlayViewController verknüpft werden.

So erstellen Sie einen injizierbaren OverlayViewController mit dem Namen frameworks/base/packages/CarSystemUI/src/com/android/systemui/car/codelab/CodeLabViewController.java mit folgendem Inhalt:

package com.android.systemui.car.codelab;

import com.android.systemui.R;
import com.android.systemui.car.window.OverlayViewController;
import com.android.systemui.car.window.OverlayViewGlobalStateController;
import com.android.systemui.dagger.SysUISingleton;

import javax.inject.Singleton;

@SysUISingleton
public class CodeLabViewController extends OverlayViewController {

    @Inject
    public CodeLabViewController(
            OverlayViewGlobalStateController overlayViewGlobalStateController) {
        super(R.id.codelab_stub, overlayViewGlobalStateController);
    }
}

Schritt 4: Erstellen Sie einen OverlayViewMediator

Es ist ein OverlayViewMediator erforderlich, der ausgelöst wird, wenn eine neue Ansicht angezeigt oder ausgeblendet wird.

Erstellen Sie einen neuen injizierbaren OverlayViewMediator mit dem Namen frameworks/base/packages/CarSystemUI/src/com/android/systemui/car/codelab/CodeLabViewMediator.java mit dem folgenden Inhalt:
package com.android.systemui.car.codelab;

import android.bluetooth.BluetoothAdapter; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter;
import com.android.systemui.car.window.OverlayViewMediator; import com.android.systemui.dagger.SysUISingleton;
import javax.inject.Inject;
@SysUISingleton public class CodeLabViewMediator implements OverlayViewMediator { Context mContext; CodeLabViewController mCodeLabViewController;
@Inject public CodeLabViewMediator(Context context, CodeLabViewController codeLabViewController) { mContext = context; mCodeLabViewController = codeLabViewController; }
@Override public void registerListeners() { // no-op }
@Override public void setupOverlayContentViewControllers() { // no-op } }

Schritt 5: Zeigen Sie die Ansicht an

Um das Verständnis zu erleichtern und unsere Ansicht auszulösen, verwenden Sie Bluetooth, wenn der Status ausgeschaltet ist.

Ersetzen Sie // no-op in CodeLabViewMediator#registerListeners durch Folgendes:

// Register Show Listener
mContext.registerReceiver(new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();

if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) { final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); switch (state) { case BluetoothAdapter.STATE_OFF: // Show OverlayViewController mCodeLabViewController.start(); break; } } } }, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));

Schritt 6: Ansicht ausblenden

Die Ansicht wird ausgeblendet, wenn die Schaltfläche „Ausblenden!“ aktiviert wird. Schaltfläche angeklickt wird. Da sich diese Aktion nur auf die Schaltfläche der erweiterten Ansicht bezieht, fügen Sie diese direkt zu Ihrem OverlayViewController hinzu.

Fügen Sie CodeLabViewController die folgende Methode hinzu:

@Override
protected void onFinishInflate() {
    getLayout().findViewById(R.id.codelab_button).setOnClickListener(v -> {
        stop();
    });
}

Schritt 7: Konfigurieren Sie den neuen OverlayViewMediator

  1. Um den neuen OverlayViewMediator zu OverlayWindowModule hinzuzufügen, fügen Sie den folgenden Code zu OverlayWindowModule hinzu:
    /** Injects CodeLabViewMediator. */
    @Binds
    @IntoMap
    @ClassKey(CodeLabViewMediator.class)
    public abstract OverlayViewMediator bindCodeLabViewMediator(
            CodeLabViewMediator overlayViewsMediator);
    
  2. Um den neuen OverlayViewMediator zu config_carSystemUIOverlayViewsMediators hinzuzufügen, fügen Sie die folgende Zeile zu config_carSystemUIOverlayViewsMediators in frameworks/base/packages/CarSystemUI/res/values/config.xml hinzu:
    <item>com.android.systemui.car.codelab.CodeLabViewMediator</item>
    

Ergebnis

Glückwunsch! Sie haben eine Ansicht im SystemUIOverlayWindow erstellt:

SystemUIOverlayWindow
Abbildung 2. SystemUIOverlayWindow

Zusätzliche Ressourcen

Weitere Informationen finden Sie in den unten bereitgestellten Ressourcen.

Beispiel für OverlayViewController

Sehen Sie sich den Vollbild-Benutzerumschalter als einfache Anwendung von SystemUIOverlayWindow: an:

Andere OverlayViewController

OverlayPanelViewController

Ein OverlayPanelViewController wird verwendet, um grundlegende Ziehanimationen beim Ein- und Ausblenden von Ansichten in SystemUIOverlayWindow bereitzustellen. Weitere Informationen finden Sie im Benachrichtigungsfeld: