यह पृष्ठ बताता है कि SystemUIOverlayWindow
में एक दृश्य कैसे बनाया जाए।
आपके शुरू करने से पहले
नीचे दी गई सामग्री यह मानती है कि आपने ये सिस्टम यूआई लेख पढ़े हैं:
यह लेख:
- मान लें कि आप एंड्रॉइड ऑटोमोटिव ओएस और इसके
SystemUIOverlayWindow
के उपयोग के मामलों से परिचित हैं। -
OverlayViewController
के कुछ उपवर्गों के उदाहरण प्रदान करता है। -
OverlayViewController
के उपवर्गों को संबोधित नहीं करता। - यह नहीं बताता कि विकास के लिए एंड्रॉइड कैसे सेट अप करें।
- प्रत्येक विकल्प का वर्णन नहीं करता है जिसे बेस क्लास में ओवरराइड किया जा सकता है। बल्कि यह केवल उन्हीं का वर्णन करता है जो बुनियादी दृष्टिकोण स्थापित करने के लिए आवश्यक हैं।
कोडलैब पूरा करें
चरण 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>
यह लेआउट निम्नलिखित दृश्य बनाता है:
चरण 2: SysUIOverlayWindow में एक ViewStub जोड़ें
SystemUIOverlayWindow
में ViewStub जोड़कर दृश्य को अपनी विंडो में जोड़ें।
निम्नलिखित कोड को फ्रेमलेआउट रूट में frameworks/base/packages/CarSystemUI/res/layout/sysui_overlay_window.xml
में जोड़ें:
<ViewStub android:id="@+id/codelab_stub" android:layout_width="match_parent" android:layout_height="match_parent" android:layout="@layout/codelab_layout"/>
FrameLayout
FrameLayout
रूट में व्यूस्टब्स को जिस क्रम में परिभाषित किया गया है वह विंडो में दृश्यों के ज़ेड-ऑर्डरिंग को परिभाषित करता है। चूँकि इस कोडलैब में लेयरिंग व्यू शामिल नहीं है, आप रूट FrameLayout
में कहीं भी कोड स्निपेट जोड़ सकते हैं।
चरण 3: एक OverlayViewController बनाएं
दिखाए और छुपाए जाने के लिए, नए लेआउट को OverlayViewController से लिंक किया जाना चाहिए।
निम्नलिखित सामग्री के साथ 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
बनाएं: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 कॉन्फ़िगर करें
- OverlayWindowModule में नया OverlayViewMediator जोड़ने के लिए, OverlayWindowModule में निम्नलिखित कोड जोड़ें:
/** Injects CodeLabViewMediator. */ @Binds @IntoMap @ClassKey(CodeLabViewMediator.class) public abstract OverlayViewMediator bindCodeLabViewMediator( CodeLabViewMediator overlayViewsMediator);
- config_carSystemUIOverlayViewsMediator में नया OverlayViewMediator जोड़ने के लिए,
frameworks/base/packages/CarSystemUI/res/values/config.xml
में config_carSystemUIOverlayViewsMediator में निम्न पंक्ति जोड़ें:<item>com.android.systemui.car.codelab.CodeLabViewMediator</item>
परिणाम
बधाई हो! आपने SystemUIOverlayWindow
में एक दृश्य बनाया है:
अतिरिक्त संसाधन
अधिक जानने के लिए, नीचे दिए गए संसाधन देखें।
नमूना ओवरलेव्यूकंट्रोलर
पूर्ण स्क्रीन उपयोगकर्ता स्विचर को SystemUIOverlayWindow:
:
अन्य OverlayViewControllers
ओवरलेपैनलव्यूकंट्रोलर
SystemUIOverlayWindow
अंदर दृश्य दिखाते और छिपाते समय बुनियादी ड्रैगिंग एनीमेशन प्रदान करने के लिए OverlayPanelViewController का उपयोग किया जाता है। अधिक जानने के लिए अधिसूचना पैनल देखें: