सिस्टमयूआईओवरलेविंडो कोडलैब

यह आलेख बताता है कि SystemUIOverlayWindow में दृश्य कैसे बनाया जाए।

इससे पहले कि आप शुरू करें

नीचे दी गई सामग्री मानती है कि आपने ये सिस्टम UI लेख पढ़ लिए हैं:

यह लेख:

  • मान लें कि आप Android Automotive OS और उसके SystemUIOverlayWindow के उपयोग के मामलों से परिचित हैं।
  • OverlayViewController के कुछ उपवर्गों के उदाहरण प्रदान करता है।
  • OverlayViewController के उपवर्गों को संबोधित नहीं करता है।
  • विकास के लिए Android कैसे सेट करें, इसकी व्याख्या नहीं करता है।
  • प्रत्येक विकल्प का वर्णन नहीं करता है जिसे आधार वर्गों में ओवरराइड किया जा सकता है। इसके बजाय यह केवल उन लोगों का वर्णन करता है जिन्हें बुनियादी दृष्टिकोण स्थापित करने की आवश्यकता होती है।

कोडलैब को पूरा करें

चरण 1: OverlayViewController के लिए एक लेआउट बनाएं

निम्नलिखित को शामिल करने के लिए frameworks/base/packages/CarSystemUI/res/layout/codelab_layout.xml नाम की एक फाइल बनाएं:

<?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>

यह लेआउट निम्नलिखित दृश्य बनाता है:

ओवरले व्यू कंट्रोलर
चित्र 1. ओवरले व्यू कंट्रोलर

चरण 2: SysUIOverlayWindow में एक ViewStub जोड़ें

SystemUIOverlayWindow में ViewStub जोड़कर अपनी विंडो में दृश्य जोड़ें।

निम्नलिखित कोड को frameworks/base/packages/CarSystemUI/res/layout/sysui_overlay_window.xml में रूट FrameLayout में जोड़ें:

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

जिस क्रम में ViewStubs को रूट FrameLayout में परिभाषित किया गया है, वह विंडो में दृश्यों के Z- क्रम को परिभाषित करता है। चूंकि इस कोडलैब में लेयरिंग व्यू शामिल नहीं हैं, इसलिए आप FrameLayout रूट में कहीं भी कोड स्निपेट जोड़ सकते हैं।

चरण 3: एक ओवरले व्यू कंट्रोलर बनाएं

दिखाने और छिपाने के लिए, नया लेआउट ओवरले व्यू कंट्रोलर से जुड़ा होना चाहिए।

निम्नलिखित सामग्री के साथ frameworks/base/packages/CarSystemUI/src/com/android/systemui/car/codelab/CodeLabViewController.java OverlayViewController लिए:

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);
    }
}

चरण 4: एक OverlayViewMediator बनाएँ

नया दृश्य दिखाए जाने या छुपाए जाने पर ट्रिगर करने के लिए एक OverlayViewMediator की आवश्यकता होती है।

निम्नलिखित सामग्री के साथ frameworks/base/packages/CarSystemUI/src/com/android/systemui/car/codelab/CodeLabViewMediator.java OverlayViewMediator एक नया इंजेक्शन योग्य OverlayViewMediator बनाएं:
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 } }

चरण 5: दृश्य दिखाएं

समझने में आसानी के लिए और हमारे विचार को ट्रिगर करने के लिए, स्थिति बंद होने पर ब्लूटूथ का उपयोग करें।

CodeLabViewMediator#registerListeners में // no-op को निम्नलिखित से बदलें:

// 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));

चरण 6: दृश्य छुपाएं

जब "छिपाएँ!" बटन क्लिक किया जाता है। चूंकि यह क्रिया केवल फुलाए हुए दृश्य के बटन पर होती है, इसलिए इसे सीधे अपने साथ जोड़ें OverlayViewController

CodeLabViewController में निम्न विधि जोड़ें:

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

चरण 7: नया OverlayViewMediator कॉन्फ़िगर करें

  1. OverlayWindowModule में नया OverlayViewMediator जोड़ने के लिए, OverlayWindowModule में निम्न कोड जोड़ें:
    /** Injects CodeLabViewMediator. */
    @Binds
    @IntoMap
    @ClassKey(CodeLabViewMediator.class)
    public abstract OverlayViewMediator bindCodeLabViewMediator(
            CodeLabViewMediator overlayViewsMediator);
    
  2. config_carSystemUIOverlayViewsMediators में नया OverlayViewMediator जोड़ने के लिए, निम्न पंक्ति को config_carSystemUIOverlayViewsMediators में frameworks/base/packages/CarSystemUI/res/values/config.xml में जोड़ें:
    <item>com.android.systemui.car.codelab.CodeLabViewMediator</item>
    

परिणाम

बधाई हो! आपने SystemUIOverlayWindow में एक दृश्य बनाया है:

सिस्टमयूआईओवरलेविंडो
चित्र 2. SystemUIOverlayWindow

अतिरिक्त संसाधन

अधिक जानने के लिए, नीचे दिए गए संसाधन देखें।

नमूना ओवरले व्यू कंट्रोलर

पूर्ण स्क्रीन उपयोगकर्ता स्विचर को SystemUIOverlayWindow: के सीधे अनुप्रयोग के रूप में देखें:

अन्य ओवरले व्यू कंट्रोलर

OverlayPanelViewController

SystemUIOverlayWindow के अंदर दृश्य दिखाते और छुपाते समय एक OverlayPanelViewController का उपयोग बुनियादी ड्रैगिंग एनीमेशन प्रदान करने के लिए किया जाता है। अधिक जानने के लिए अधिसूचना पैनल देखें: