Sistem çubuklarını özelleştirmek için XML yapılandırmaları ve Dagger modüllerinin kullanıcı arayüzü bileşenleriyle birlikte kullanın.
Sistem çubuğu davranışını tanımlama
Sistem çubuğu tanımlamak için XML dosyasında <SystemBar> etiketini kullanarak görünümü ve animasyonu tanımlayın. Bu XML dosyası, bir çalışma zamanı kaynak yerleşimi (RRO) parçasıdır.
SystemBar etiketi özellikleri
Bir sistem çubuğu yapılandırmasının kök öğesi <SystemBar>'dır ve şu özellikleri destekler:
| Özellik | Durum | Açıklama |
|---|---|---|
id |
Zorunlu | Sistem çubuğunun benzersiz kaynak kimliği. Örneğin,
@id/my_custom_status_bar |
type |
Zorunlu | Sistem çubuğunun türünü belirtir. Tür, status veya navigation olabilir. |
barZOrder |
Zorunlu | Sistem çubuğunun Z sırasını temsil eden tam sayı. Yüksek değerler, sistemin çubuğu diğerlerinin üzerinde çizdiğini gösterir. Pozitif bir tam sayı olmalıdır. Aşağıdaki kurallar geçerlidir:
|
defaultVariant |
Zorunlu | Sistem çubuğu başlatıldığında varsayılan olarak uygulanan <Variant> kimliği |
displayId |
İsteğe bağlı | Sistem çubuğu başlatıldığında varsayılan olarak uygulanan <Variant> kimliği |
hideForKeyboard |
İsteğe bağlı |
Yazılım klavyesi etkin olduğunda sistem çubuğunun otomatik olarak gizlenip gizlenmeyeceğini belirten Bu özellik |
dragOpenNotification |
İsteğe bağlı |
Sistem çubuğunun bildirim panelinin açılmasını otomatik olarak tetikleyip tetiklemeyeceğini belirtmek için kullanılan |
dragCloseNotification |
İsteğe bağlı |
Sistem çubuğunun bildirim panelinin kapatılmasını otomatik olarak tetikleyip tetiklemediğini belirtmek için |
Sistem çubuğu kimlikleri ve türleri
TopCarSystemBar, BottomCarSystemBar, LeftCarSystemBar ve RightCarSystemBar değerlerini id değeri olarak kullanmaktan kaçının. Sistem, bu kimlikleri geriye dönük uyumluluk için ayırır ve bunların kullanılması beklenmedik davranışlara yol açabilir.
Temel üst durum çubuğu ve alt gezinme çubuğu yapılandırmaları için sırasıyla status ve nav değerlerini type özelliği değerleri olarak kullanın.
Bu kimlikleri kullanıyorsanız Dagger ile sistem çubuğu kullanıcı arayüzü sağlama başlıklı bölümü atlayabilirsiniz.
<Variant>- Görsel durumları tanımlar. Daha fazla bilgi edinmek için Görsel durum tasarlamak için varyant kullanma başlıklı makaleyi inceleyin.
<SystemBar>etiketinde bir veya daha fazla<Variant>etiketi tanımlayın. Her varyant, farklı bir görsel durumu temsil eder ve bu durumdaki sistem çubuğunun görünümünü kontrol eden özellikleri içerir. <Visibility isVisible="true|false">- Sistem çubuğunun görünürlüğünü kontrol eder.
isVisibleBoole sinyalleri, sistem çubuğunun görünür olup olmadığını gösterir. <Alpha alpha="float_value">- Sistem çubuğunun şeffaflığını kontrol eder.
alphadeğeri,0.0(tamamen şeffaf) ile1.0(tamamen opak) arasında değişir. <Bounds .../>Sistem çubuğunun konumunu ve boyutunu tanımlar.
<SystemBar>öğeleri için sınırlamalar, ekranın en az bir kenarına (sol, üst, sağ veya alt) değmelidir. Özellikler şunlardır:left,top,right,bottom: Mutlak koordinatlar.width,height: Boyutlar.leftOffset,topOffset,rightOffset,bottomOffset: Dikdörtgenin merkezine doğru uzaklıklar.
<Corner radius="dimen"/>Sistem çubuğunun köşe yarıçapını tanımlar.
radiusiçin köşe yarıçapının boyutunu girin.<Insets .../>Sistem çubuğu için iç kısımları tanımlar. Özellikler
left,top,rightvebottom'dür. Her özellik için iç kısımların boyut değerini girin.<Gravity .../>Sistem çubuğu içeriğinin yer çekimini tanımlar. Daha fazla bilgi edinmek için kaynak kodundaki
HunTagXmlParserKt.GRAVITY_TAGbölümüne bakın.- Yer çekimi değeri atladığınızda sistem bunu dahili olarak hesaplar.
- Desteklenen değerler
TOP,BOTTOM,LEFT,RIGHT,CENTER,CENTER_HORIZONTAL,CENTER_VERTICALveFILL_HORIZONTALkombinasyonlarıdır. Her biri|karakteriyle ayrılır.
Boyut birimleri
px, dp (veya dip), % ya da dimension, integer, fraction, string veya attribute kaynaklarına yapılan referanslarla boyutları belirtin.
Geçişler: Varyantlar arasında animasyon oluşturma
Daha fazla bilgi için Geçiş yapılandırma başlıklı makaleyi inceleyin. Sistem çubuğunun farklı varyantlar arasında nasıl animasyon yapacağını tanımlamak için <Transitions> bloğunu kullanın:
| Öğe | Etiket özelliği |
|---|---|
<Transition> |
fromVariant, toVariant, onEvent, onEventTokens, animator, duration, delay, interpolator |
<Transitions> |
defaultDuration, defaultInterpolator |
Ölçeklenebilir kullanıcı arayüzü, sistem çubuklarındaki geçişleri yalnızca bunları sarmalayıcı olmayan mod kullanım alanları için tanımladığınızda destekler. Bu, tam ekran modunun bir sistem çubuğunu gizlediğinde (veya gösterdiğinde) sistem çubukları için ölçeklenebilir kullanıcı arayüzü pencere geçişlerini tetiklemediği anlamına gelir.
Ölçeklenebilir kullanıcı arayüzü, bir sistem çubuğunu gizleme (veya gösterme) etkinliklerini göndermeye devam eder. Böylece diğer paneller gerektiği gibi yanıt verebilir. hideForKeyboard özelliğinin düzgün çalışması için sistem çubuklarını gizleme ve gösterme geçişleri sağlanmalıdır. Aşağıdaki örnek XML yapısını inceleyin:
<SystemBar id="@id/my_custom_status_bar" type="status" barZOrder="0" defaultVariant="@id/default_variant" hideForKeyboard="true">
<Variant id="@+id/default_variant">
<Bounds top="0px" left="0px" right="100%" height="100px"/>
<Visibility isVisible="true"/>
</Variant>
<Variant id="@+id/hidden_variant" parent="@id/default_variant">
<Visibility isVisible="false"/>
</Variant>
<Transitions>
<Transition onEvent="_System_Show_Panel" onEventTokens="panelId= my_custom_status_bar" toVariant="@id/default_variant"/>
<Transition onEvent="_System_Hide_Panel" onEventTokens="panelId= my_custom_status_bar" toVariant="@id/hidden_variant"/>
</Transitions>
</SystemBar>
Dagger ile sistem çubuğu kullanıcı arayüzü sağlama
Sistem çubuğunu XML'de tanımladıktan sonra gerçek View ve Window değerlerini sağlayın.
Bunu yapmak için varsayılan Dagger modülüne uygulama geçersiz kılma işlemi uygulayın,
CarSystemBarModule.java. Örneğin:
import com.android.systemui.car.systembar.CarSystemBarViewSupplier;
import com.android.systemui.car.systembar.CarSystemBarWindowSupplier;
import com.android.systemui.car.systembar.CarSystemBarWindowSupplierUsingLayout;
import com.example.R;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoMap;
import dagger.multibindings.StringKey;
@Module
public abstract class MySystemBarModule extends CarSystemBarModule {
@Provides
@IntoMap
@StringKey("my_custom_status_bar") // Matches the <SystemBar> id
static CarSystemBarViewSupplier bindMyCustomStatusBarViewSupplier() {
return new CarSystemBarViewSupplierUsingLayout(
R.layout.my_custom_status_bar, // provisioned layout
R.layout.my_custom_status_bar_unprovisioned // unprovisioned layout
);
}
@Provides
@IntoMap
@StringKey("my_custom_status_bar") // Matches the <SystemBar> id
static CarSystemBarWindowSupplier bindMyCustomStatusBarWindowSupplier() {
return new CarSystemBarWindowSupplierUsingLayout(
R.layout.my_navigation_bar_window, // Can reuse existing window layouts
R.id.my_custom_bar_window // The ID that will be assigned to the window
);
}
}
SystemUI geçersiz kılma işleminde Dagger modülü oluşturma
Özel düzen kaynaklarınızı genişletmek için CarSystemBarViewSupplierUsingLayout ve CarSystemBarWindowSupplierUsingLayout sınıflarını kullanın.
Özel tedarikçilerinizi sağlamak için bir Dagger modülü oluşturun. @StringKey, <SystemBar> XML etiketinizdeki id ile eşleşmelidir.
CarSystemBarModule değerini geçersiz kılmak için şu kod örneğine bakın:
import com.android.systemui.car.systembar.CarSystemBarViewSupplier;
import com.android.systemui.car.systembar.CarSystemBarWindowSupplier;
import com.android.systemui.car.systembar.CarSystemBarWindowSupplierUsingLayout;
import com.example.R;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoMap;
import dagger.multibindings.StringKey;
@Module
public abstract class MySystemBarModule extends CarSystemBarModule {
@Provides
@IntoMap
@StringKey("my_custom_status_bar") // Matches the <SystemBar> id
static CarSystemBarViewSupplier bindMyCustomStatusBarViewSupplier() {
return new CarSystemBarViewSupplierUsingLayout(
R.layout.my_custom_status_bar, // provisioned layout
R.layout.my_custom_status_bar_unprovisioned // unprovisioned layout
);
}
@Provides
@IntoMap
@StringKey("my_custom_status_bar") // Matches the <SystemBar> id
static CarSystemBarWindowSupplier bindMyCustomStatusBarWindowSupplier() {
return new CarSystemBarWindowSupplierUsingLayout(
R.layout.my_navigation_bar_window, // Can reuse existing window layouts
R.id.my_custom_bar_window // The ID that will be assigned to the window
);
}
}
Sistem düzeyinde yapılandırma oluşturmak için RRO kullanma
RRO'nuzdaki res/values/config.xml dosyasında sistem çubuklarını etkileyen çeşitli sistem düzeyinde yapılandırmalar ayarlayın.
Eski sistem çubuklarını devre dışı bırakma
Ölçeklenebilir kullanıcı arayüzüyle çakışmaları önlemek için aşağıdaki işaretleri false olarak ayarlayarak eski sistem çubuğu yapılandırmalarını devre dışı bırakın:
<resources>
<bool name="config_enableTopSystemBar">false</bool>
<bool name="config_enableBottomSystemBar">false</bool>
<bool name="config_enableLeftSystemBar">false</bool>
<bool name="config_enableRightSystemBar">false</bool>
</resources>
Gizlilik göstergesinin konumu
config_privacyIndicatorLocation dize kaynağı, hangi sistem çubuğunun gizlilik göstergelerine ev sahipliği yaptığını belirtir. Değer, <SystemBar> öğesinin id adı olmalıdır.
<resources>
<!-- "my_custom_status_bar" corresponds to the android:id name of a SystemBar -->
<string name="config_privacyIndicatorLocation">my_custom_status_bar</string>
</resources>
Sürükleme etkinliği işleyicileri
Bu yapılandırmalar, hangi sistem çubuklarının sürükleme etkinliklerini dinleyeceğini (örneğin, bildirim panelini açmak için aşağı kaydırma) belirtir. Ölçeklenebilir kullanıcı arayüzü içeren Android Automotive OS'ten itibaren bu özellikleri tanımlamak için yönlendirilen keşif kaynak dizileri yerine varsayılan olarak XML özelliklerini kullanın.
Önerilen: XML destekli keşif (ölçeklenebilir kullanıcı arayüzü)
Yer paylaşımı XML'nizdeki <SystemBar> etiketinizde doğrudan dragOpenNotification ve dragCloseNotification özelliklerini kullanın:
<SystemBar id="@id/my_custom_status_bar" type="status" barZOrder="0" defaultVariant="@id/default_variant" dragOpenNotification="true">
<Variant id="@+id/default_variant">
<Bounds top="0px" left="0px" right="100%" height="100px"/>
<Visibility isVisible="true"/>
</Variant>
</SystemBar>
Eski: Kaynak dizisi (yedek)
Ölçeklenebilir olmayan bir kullanıcı arayüzü derlemesini koruyorsanız veya geriye dönük uyumlu cihazlar için dinleyiciler belirtmeniz gerekiyorsa RRO'nuzda string-array yaklaşımını kullanın.res/values/config.xml Bu string-array kaynaklar, hangi sistem çubuklarının sürükleme etkinliklerini dinleyeceğini belirtir. Örneğin, bildirim panelini açmak için. Her <item>, bir id sistem çubuğunun adıdır.
config_registerHvacDragCloseListenerconfig_notificationDragOpenListenerconfig_notificationDragCloseListener
Örneğin:
<resources>
<string-array name="config_notificationDragOpenListener" translatable="false">
<item>my_custom_status_bar</item>
</string-array>
</resources>
Derleme ve dağıtma
Durum çubuğu oluşturmak ve dağıtmak için:
Cihazı, değiştirilmiş SystemUI geçersiz kılma uygulamanızla yükleyin.
RRO projenizi derlemek için Android derleme sistemini (
m) kullanın.Oluşturulan RRO APK'sını Android Automotive cihazınıza dağıtın.
adb installkomutunu kullanın veya RRO'nuzu içeren tam bir derleme yükleyin.