SystemUIOverlayWindow कोडलैब

इस पेज पर, SystemUIOverlayWindow में व्यू बनाने का तरीका बताया गया है.

शुरू करने से पहले

यहां दिए गए कॉन्टेंट को लगता है कि आपने सिस्टम यूज़र इंटरफ़ेस (यूआई) के ये लेख पढ़ लिए हैं:

यह लेख:

  • मान लें कि आपको Android Automotive OS और इसके इस्तेमाल के उदाहरणों के बारे में पता है SystemUIOverlayWindow.
  • OverlayViewController की कुछ सब-क्लास के उदाहरण देता है.
  • यह OverlayViewController की सब-क्लास के लिए इस्तेमाल नहीं किया जाता.
  • डेवलपमेंट के लिए Android को सेट अप करने का तरीका नहीं बताया गया है.
  • हर उस विकल्प के बारे में नहीं बताया गया है जिसे बेस क्लास में बदला जा सकता है. इसके बजाय, यह बताती है जिन्हें बुनियादी व्यू सेट अप करने की ज़रूरत होती है.

कोडलैब (कोड बनाना सीखना) पूरा करना

पहला चरण: 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>

इस लेआउट से यह व्यू बनता है:

ओवरले व्यूकंट्रोलर
पहली इमेज. ओवरले व्यूकंट्रोलर

दूसरा चरण: SysUIOverlayWindow में ViewStub जोड़ना

एक व्यूस्टब SystemUIOverlayWindow तक पहुंचे.

यह कोड इसमें जोड़ें 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"/>

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

तीसरा चरण: OverlayViewController बनाएं

नए लेआउट को दिखाने और छिपाने के लिए, यह ज़रूरी है कि वह OverlayViewController.

नाम का इंजेक्ट किया जा सकने वाला OverlayViewController बनाने के लिए frameworks/base/packages/CarSystemUI/src/com/android/systemui/car/codelab/CodeLabViewController.java इसमें ये वीडियो शामिल होते हैं:

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

चौथा चरण: OverlayViewMediator बनाना

अगर आप ओवरलेव्यूमीडियाटॉर का इस्तेमाल करें.

इंजेक्ट किया जा सकने वाला नया OverlayViewMediator बनाएं frameworks/base/packages/CarSystemUI/src/com/android/systemui/car/codelab/CodeLabViewMediator.java इसमें ये वीडियो शामिल होते हैं:
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));

छठा चरण: व्यू छिपाना

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

CodeLabViewController में यह तरीका जोड़ें:

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

सातवां चरण: नया OverlayViewMediator कॉन्फ़िगर करना

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

नतीजा

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

SystemUIOverlayWindow
दूसरी इमेज. SystemUIOverlayWindow

अन्य संसाधन

ज़्यादा जानकारी के लिए, नीचे दिए गए संसाधनों को देखें.

OverlayViewController का सैंपल

फ़ुल स्क्रीन पर उपयोगकर्ता स्विचर को इसके आसान ऐप्लिकेशन के तौर पर देखें SystemUIOverlayWindow::

अन्य OverlayViewControllers

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

अगर आप OverlayPanelViewController का इस्तेमाल व्यू को दिखाने और छिपाने के लिए, बेसिक ड्रैग ऐनिमेशन देने के लिए किया जाता है SystemUIOverlayWindow. ज़्यादा जानने के लिए सूचना पैनल देखें: