SystemUIOverlayWindow-Codelab

In diesem Artikel wird erläutert, wie Sie eine Ansicht im SystemUIOverlayWindow .

Bevor du anfängst

Der unten bereitgestellte Inhalt setzt voraus, dass Sie diese System-UI-Artikel gelesen haben:

Dieser Artikel:

  • Setzt voraus, dass Sie mit Anwendungsfällen für das Android Automotive OS und sein SystemUIOverlayWindow .
  • Enthält Beispiele für bestimmte Unterklassen des OverlayViewController .
  • Adressiert keine Unterklassen des OverlayViewController .
  • Erklärt nicht, wie Android für die Entwicklung eingerichtet wird.
  • Beschreibt nicht jede Option, die in Basisklassen überschrieben werden kann. Vielmehr werden nur diejenigen beschrieben, die zum Einrichten einer grundlegenden Ansicht erforderlich sind.

Vervollständigen Sie das Codelab

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

Erstellen Sie eine Datei namens 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 SysUIOverlayWindow einen ViewStub hinzu

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

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

<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 Ebenenansichten beinhaltet, können Sie das Code-Snippet an einer beliebigen Stelle im Root- FrameLayout .

Schritt 3: Erstellen Sie einen OverlayViewController

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

So erstellen Sie einen injizierbaren OverlayViewController namens 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

Ein OverlayViewMediator zum Auslösen, wenn eine neue Ansicht angezeigt oder ausgeblendet wird, ist erforderlich.

Erstellen Sie einen neuen injizierbaren OverlayViewMediator namens frameworks/base/packages/CarSystemUI/src/com/android/systemui/car/codelab/CodeLabViewMediator.java mit folgendem 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

Verwenden Sie zum leichteren Verständnis und zum Auslösen unserer Ansicht 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: Blenden Sie die Ansicht aus

Die Ansicht wird ausgeblendet, wenn die Meldung "Hide!" Schaltfläche angeklickt wird. Da diese Aktion nur auf der Schaltfläche der aufgeblasenen Ansicht ausgeführt wird, fügen Sie diese direkt zu OverlayViewController .

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 OverlayWindowModule den folgenden Code 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 :
    <item>com.android.systemui.car.codelab.CodeLabViewMediator</item>
    

Ergebnis

Herzliche Glückwünsche! Sie haben eine Ansicht im SystemUIOverlayWindow :

SystemUIOverlayWindow
Abbildung 2. SystemUIOverlayWindow

Zusätzliche Ressourcen

Weitere Informationen finden Sie in den unten bereitgestellten Ressourcen.

Beispiel OverlayViewController

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

Andere OverlayViewController

OverlayPanelViewController

Ein OverlayPanelViewController wird verwendet, um grundlegende Ziehanimationen bereitzustellen, wenn Ansichten in SystemUIOverlayWindow und ausgeblendet werden. Weitere Informationen finden Sie im Benachrichtigungsfeld: