Trang này giải thích cách tạo chế độ xem trong SystemUIOverlayWindow
.
Trước khi bạn bắt đầu
Nội dung được cung cấp bên dưới giả định rằng bạn đã đọc các bài viết về Giao diện người dùng hệ thống này:
Bài viết này:
- Giả sử bạn đã quen với các trường hợp sử dụng của Android Automotive OS và
SystemUIOverlayWindow
của nó. - Cung cấp ví dụ về các lớp con nhất định của
OverlayViewController
. - Không giải quyết các lớp con của
OverlayViewController
. - Không giải thích cách thiết lập Android để phát triển.
- Không mô tả từng tùy chọn có thể được ghi đè trong các lớp cơ sở. Đúng hơn là nó chỉ mô tả những thứ cần thiết để thiết lập chế độ xem cơ bản.
Hoàn thành lớp học lập trình
Bước 1: Tạo bố cục cho OverlayViewController
Tạo một tệp có tên frameworks/base/packages/CarSystemUI/res/layout/codelab_layout.xml
để chứa những nội dung sau:
<?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>
Bố cục này tạo ra chế độ xem sau:
Bước 2: Thêm ViewStub vào SysUIOverlayWindow
Thêm chế độ xem vào cửa sổ của bạn bằng cách thêm ViewStub vào SystemUIOverlayWindow
.
Thêm mã sau vào frameworks/base/packages/CarSystemUI/res/layout/sysui_overlay_window.xml
trong FrameLayout
gốc:
<ViewStub android:id="@+id/codelab_stub" android:layout_width="match_parent" android:layout_height="match_parent" android:layout="@layout/codelab_layout"/>
Thứ tự mà ViewStub được xác định trong FrameLayout
gốc sẽ xác định thứ tự Z của các khung nhìn trong cửa sổ. Vì lớp học lập trình này không liên quan đến việc phân lớp các chế độ xem nên bạn có thể thêm đoạn mã vào bất kỳ đâu trong FrameLayout
gốc.
Bước 3: Tạo OverlayViewController
Để được hiển thị và ẩn, bố cục mới phải được liên kết với OverlayViewController .
Để tạo một OverlayViewController
có thể tiêm được có tên là frameworks/base/packages/CarSystemUI/src/com/android/systemui/car/codelab/CodeLabViewController.java
với nội dung sau:
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); } }
Bước 4: Tạo OverlayViewMediator
Cần có OverlayViewMediator để kích hoạt khi chế độ xem mới được hiển thị hoặc bị ẩn.
Tạo mộtOverlayViewMediator
có thể tiêm mới có tên là frameworks/base/packages/CarSystemUI/src/com/android/systemui/car/codelab/CodeLabViewMediator.java
với nội dung sau: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 } }
Bước 5: Hiển thị chế độ xem
Để dễ hiểu và kích hoạt chế độ xem của chúng tôi, hãy sử dụng Bluetooth khi trạng thái tắt.
Thay thế // no-op
trong CodeLabViewMediator#registerListeners
bằng dòng sau:
// 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));
Bước 6: Ẩn chế độ xem
Chế độ xem sẽ bị ẩn khi nút "Ẩn!" nút được bấm. Vì hành động này chỉ thực hiện trên nút của chế độ xem tăng cường, nên hãy thêm hành động này trực tiếp vào OverlayViewController
của bạn.
Thêm phương thức sau vào CodeLabViewController
:
@Override protected void onFinishInflate() { getLayout().findViewById(R.id.codelab_button).setOnClickListener(v -> { stop(); }); }
Bước 7: Định cấu hình OverlayViewMediator mới
- Để thêm OverlayViewMediator mới vào OverlayWindowModule, hãy thêm đoạn mã sau vào OverlayWindowModule :
/** Injects CodeLabViewMediator. */ @Binds @IntoMap @ClassKey(CodeLabViewMediator.class) public abstract OverlayViewMediator bindCodeLabViewMediator( CodeLabViewMediator overlayViewsMediator);
- Để thêm OverlayViewMediator mới vào config_carSystemUIOverlayViewsMediators, hãy thêm dòng sau vào config_carSystemUIOverlayViewsMediators trong
frameworks/base/packages/CarSystemUI/res/values/config.xml
:<item>com.android.systemui.car.codelab.CodeLabViewMediator</item>
Kết quả
Chúc mừng! Bạn đã tạo chế độ xem trong SystemUIOverlayWindow
:
Tài nguyên bổ sung
Để tìm hiểu thêm, hãy xem các tài nguyên được cung cấp bên dưới.
Mẫu OverlayViewController
Xem trình chuyển đổi người dùng toàn màn hình dưới dạng một ứng dụng đơn giản của SystemUIOverlayWindow:
:
Các bộ điều khiển OverlayView khác
OverlayPanelViewController
OverlayPanelViewController được sử dụng để cung cấp hoạt ảnh kéo cơ bản khi hiển thị và ẩn các chế độ xem bên trong SystemUIOverlayWindow
. Xem bảng Thông báo để tìm hiểu thêm: