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:
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 injizierbarenOverlayViewMediator
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
- 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);
- 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:
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: