Bu sayfada, VHAL'de çevirmeli girişlerin nasıl işleneceği, derlemenizi ve tüm uygulamalarda çevirme deneyiminin nasıl özelleştirileceğini öğreneceksiniz. OEM tarafından sağlanan başlatıcı gibi önceden yüklenmiş OEM uygulamaları için şu makaleye bakın: Araba Kullanıcı Arayüzü Kitaplığı (araba-ui-kitaplığı).
VHAL
Çevirmeli kumanda aşağıdaki işlemleri destekler:
- Yukarı, aşağı, sola ve sağa sürükle
- Saat yönünde ve saat yönünün tersine döndürün.
- Orta düğmeye basın.
- Geri düğmesine basın.
- Ana sayfa düğmesine basın.
- Telefon ve Medya gibi diğer düğmelere basın.
Şu konuyla ilgili dokümanlar için hardware/interfaces/automotive/vehicle/2.0/types.hal
sayfasına göz atın:
sistem özellikleri ve karşılık gelen int32Values
.
VHAL, şu işlemleri gerçekleştirmelidir:
Hatırlatma
Kullanıcı döner kumandayı sağa ittiğinde VHAL,
Aşağıdaki int32Values
özelliklerine sahip HW_KEY_INPUT
mülkü
etkinliği Android'e aktarmak için:
ACTION_DOWN
KEYCODE_SYSTEM_NAVIGATION_RIGHT
- Hedef görüntülü reklam.
Kullanıcı döner kumandayı serbest bıraktığında VHAL aynı özelliği ve ayarı kullanmalıdır.
anahtar kodu oluşturmak için ACTION_UP
kullanın. Diğer yönlerdeki otomatik hatırlatmalar,
ilgili tuş kodlarından birini kullanın.
Çapraz yönler için tuş kodları yoktur ancak VHAL, yatay ve dikey öğeleri birleştirebilir. etkinliği, donanım köşegenleri destekliyorsa köşegen oluşturulmasına neden olur. Örneğin, el hareketlerini solda ise şu verileri vermelidir:
HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_DOWN
HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_DOWN
Döner kumandanın her iki sırayla da (ve daha sonra) serbest bırakılması şu sonucu vermelidir:
HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_UP
HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_UP
Kullanıcı, serbest bırakmadan önce çevirmeli kumandayı dik yönde itebilir. Örneğin, aşağıdaki senaryo:
'nı inceleyin.Bu işlem aşağıdaki etkinlik dizisini oluşturmalıdır:
HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_DOWN
HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_DOWN
HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_UP
HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_UP
Çevirmeli kumanda basılı tutulurken tekrarlanan etkinlik oluşturulmamalıdır. tek bir yönde ilerler.
Döndür
Kullanıcı çevirmeli kumandayı saat yönünde bir tutma yeri (tıklama) döndürdüğünde (tıklama), VHAL
HW_ROTARY_INPUT
özelliğini aşağıdaki int32Values
ile kullanmalıdır
Android'e etkinlik göndermek için:
ROTARY_INPUT_TYPE_SYSTEM_NAVIGATION
- Bir (1) çadırlı.
- Hedef görüntülü reklam.
Etkinliğin zaman damgası, nanosaniye cinsinden, geçen süreye ayarlanmalıdır.
Saat yönünün tersine bir (1) noktalı döndürme, aynı etkinliği oluşturmalıdır ancak Muhafaza sayısı için -1.
Aynı yönde hızlı bir şekilde arka arkaya birden fazla dönüş noktası oluşursa VHAL
sisteme etkinliklerle aşırı yüklenmemek için kısıtlamaları tek bir etkinlik altında birleştirmesi gerekir.
Bu durumda, etkinliğin zaman damgası, rotasyondaki ilk duraklamanın gerçekleştiği zaman olmalıdır.
int32Values
, art arda kilitlenmeler arasındaki nanosaniye sayısını içermelidir.
sağlayabilir.
Örneğin, aşağıdaki rotasyon sırası:
- t0 zamanında, kullanıcı bir kaydırma noktasını saat yönünün tersine döndürdü.
- t0 + 5 ns zamanlarında, kullanıcı bir kilit noktasını saat yönünün tersine döndürdü.
- t0 + 8 ns zamanlarında, kullanıcı bir kilit noktasını saat yönünün tersine döndürdü.
şu etkinliği oluşturmalıdır:
- Tesis:
HW_ROTARY_INPUT
- Zaman damgası:
t0
int32Values
:ROTARY_INPUT_TYPE_SYSTEM_NAVIGATION
- -3 (saat yönünün tersine üç nokta).
- Hedef görüntülü reklam.
- Birinci ve ikinci kilitlenme arasında 5 ns.
- İkinci ve üçüncü duraklama arasında 3 ns.
Orta düğme
Kullanıcı orta düğmeye bastığında VHAL, HW_KEY_INPUT
öğesini kullanmalıdır
özelliğini kullanın:int32Values
ACTION_DOWN
KEYCODE_DPAD_CENTER
- Hedef görüntülü reklam.
Kullanıcı döner kumandayı serbest bıraktığında VHAL aynı özelliği kullanmalıdır.
ve anahtar kodu eklemek için ACTION_UP
kullanın.
Orta düğme basılı tutulduğunda tekrar etkinlikleri oluşturmayın.
Geri düğmesi
Kullanıcı Geri düğmesine bastığında VHAL, HW_KEY_INPUT
özelliğini kullanın:int32Values
ACTION_DOWN
KEYCODE_BACK
- Hedef görüntülü reklam.
Kullanıcı döner kumandayı serbest bıraktığında VHAL aynı özelliği kullanmalıdır.
ve anahtar kodu eklemek için ACTION_UP
kullanın.
Orta düğme basılı tutulurken repeat etkinlikleri oluşturulmamalıdır.
Ana ekran düğmesi
Ana Sayfa düğmesini Geri düğmesi gibi, KEYCODE_HOME
kullanın
/ KEYCODE_BACK
.
Diğer düğmeler
Çevirmeli kumandada ek düğmeler varsa VHAL bunları işleyebilir.
Android açısından çevirinin bir parçası olarak kabul edilmediğinden, OEM bunları seviyor.
Bunlar genellikle Geri ve Ana Sayfa düğmeleri gibi ele alınır, ancak farklı tuş kodları kullanılır.
Örneğin, KEYCODE_CALL
veya KEYCODE_MUSIC
.
Derleme yapılandırması
Çevirmeli gezinme, RotaryService
adlı bir erişilebilirlik hizmeti tarafından sağlanmaktadır.
Bu hizmeti cihazınızın sistem görüntüsüne dahil etmek için aşağıdaki satırı cihazınıza
Makefile:
PRODUCT_PACKAGES += CarRotaryController
Hata ayıklama derlemelerine aşağıdaki paketleri de dahil etmek isteyebilirsiniz:
RotaryPlayground
Çevirmeli için bir referans uygulama (bkz. RotaryPlayground).RotaryIME
Dönüşümlü demo IME (Giriş Yöntemi Düzenleyicileri bölümüne bakın).CarRotaryImeRRO
RotaryIME
için yer paylaşımı.
Çevirmeli hizmet, cihaz başlatıldığında ve bir kullanıcı tarafından otomatik olarak etkinleştirilir. geçiş yapılır. Bu şekilde kullanıcının kurulum sırasında döner kumandayı kullanabilmesi sağlanır.
Döner kumanda olan ve olmayan arabalarda aynı derlemeyi kullanırsanız
gerekli kodun eklenmesi için CarRotaryController
öğesini yukarıda gösterildiği gibi ekleyin
teşekkür ederiz. Dönen arabalarda döner hizmetin etkinleştirilmesini önlemek için
rotaryService
dizesi kaynağını
Boş dizeyle packages/services/Car/service
. Aynı derlemeyi kullanacaksınız.
Ancak çevrilen ve dönen olmayan cihazlar için ayrı ürün yapılandırmaları vardır. Yalnızca ikincisi
yer paylaşımını da içerir.
Özelleştirme
OEM'ler, aşağıdakileri kullanarak odak bulma mantığını, odak noktasını ve bazı ek öğeleri kaynak bindirmelerinin olması gerekir:
- car-ui-library
packages/apps/Car/libs/car-ui-lib
bölgesindedir RotaryService
,packages/apps/Car/RotaryController
bölgesinde bulunuyorCore
,frameworks/base/core
bölgesinde bulunuyor
Geçmişi sürükle
OEM, iki otomatik hatırlatma geçmişi türünün her birinin etkinleştirilip etkinleştirilmeyeceğini yapılandırabilir ve etkin durumda olması durumunda önbellek boyutu ve son kullanma politikası. Bu işlem, çeşitli car-ui-library'ı geçersiz kılarak yapılır kaynaklar.
Geçmiş önbelleğine odaklan
(Android 11 QPR3, Android 11 Araba,
Android 12)
FocusArea
başına bu önbellek,
FocusArea
simgesine geri dönerken odaklanılabilmesi için FocusArea
.
Bu önbellek, aşağıdaki car-ui-library kaynaklarının yer paylaşımıyla yapılandırılabilir:
-
car_ui_focus_history_cache_type
:- Önbellek devre dışı bırakıldı.
- Önbelleğin süresi bir süre sonra sona erer (aşağıya bakın).
- Önbelleğin süresi hiçbir zaman dolmaz.
car_ui_focus_history_expiration_period_ms
: Önbellek türü iki (2) olarak ayarlanırsa önbellek süresi dolar (yukarıya bakın).
FocusArea geçmiş önbelleği
(Android 11 QPR3, Android 11 Araba,
Android 12)
Bu önbellek, otomatik hatırlatmaların bir geçmişini depolar. Böylece ters yönde otomatik hatırlatmalar
odağı aynı FocusArea
değerine döndürün. Bu önbellek,
şu car-ui-library kaynakları:
-
car_ui_focus_area_history_cache_type
:- Önbellek devre dışı bırakıldı.
- Önbelleğin süresi bir süre sonra dolar (aşağıya bakın).
- Önbelleğin süresi hiçbir zaman dolmaz.
car_ui_focus_area_history_expiration_period_ms
: Kaç milisaniye önce önbellek türü 2 olarak ayarlanırsa önbelleğin süresi dolar (yukarıya bakın).car_ui_clear_focus_area_history_when_rotating
: Önbelleğin geçersiz kılınıp kılınmayacağı Kullanıcı kumandayı döndürdüğünde.
Döndürme
(Android 11 QPR3, Android 11 Araba,
Android 12)
OEM, aşağıdakilerin geçerli olup olmadığını belirtmek için RotaryService
öğesindeki iki tam sayı kaynağını geçersiz kılabilir
dönüş için fare ivmesi gibi bir ivme vardır:
rotation_acceleration_3x_ms
: Karar vermek için kullanılan zaman aralığı (milisaniye cinsinden) Google'ın kumandanın devir süresini kısaltması gerekir. Öğe bu duraklama ile bir önceki döndürme sınırlaması arasındaki aralık bu değerden küçüktür. üç tür dönme sınırlaması olarak ele alınır. 3× devre dışı bırakmak için bunu 2147483647 olarak ayarlayın ivme artışı.rotation_acceleration_2x_ms
:rotation_acceleration_3x_ms
ile benzer. 2× hızlandırma için kullanılır. 2× hızlandırmayı devre dışı bırakmak için bunu2147483647
olarak ayarlayın.
Hızlandırmanın en iyi şekilde çalışması için her bir aralık için
döndürme gibi
zorunlu
VHAL tarafından. Aksi takdirde RotaryService
, bunların göz önünde bulundurulduğu ve toplananların
rotasyonu eşit olarak ayarlanır.
/** * Property to feed H/W rotary events to android * * int32Values[0] : RotaryInputType identifying which rotary knob rotated * int32Values[1] : number of detents (clicks), positive for clockwise, * negative for counterclockwise * int32Values[2] : target display defined in VehicleDisplay. Events not * tied to specific display must be sent to * VehicleDisplay#MAIN. * int32values[3 .. 3 + abs(number of detents) - 2]: * nanosecond deltas between pairs of consecutive detents, * if the number of detents is > 1 or < -1 * * VehiclePropValue.timestamp: when the rotation occurred. If the number of * detents is > 1 or < -1, this is when the * first detent of rotation occurred. * * @change_mode VehiclePropertyChangeMode:ON_CHANGE * @data_enum RotaryInputType * @access VehiclePropertyAccess:READ */ HW_ROTARY_INPUT = ( 0x0A20 | VehiclePropertyGroup:SYSTEM | VehiclePropertyType:INT32_VEC | VehicleArea:GLOBAL),
Vurgulamaya odaklan
OEM, Android çerçevesindeki varsayılan odaklamayı geçersiz kılabilir ve car-ui-library'da öne çıkan bazı kaynaklar
Varsayılan odaklama
Android çerçevesi,
selectableItemBackground
Theme.DeviceDefault
ayında bu
özelliği, Core
içinde item_background.xml
anlamına gelir. OEM,
Varsayılan odaklamanın çekilebilir ayarını değiştirmek için item_background.xml
tuşlarına basın.
Bu çekilebilir, genellikle arka planı ayarlayan bir StateListDrawable
olmalıdır.
android:state_focused
dahil olmak üzere farklı eyalet kombinasyonlarına göre
ve android:state_pressed
. Kullanıcı, çevirmeli kumandayı kullanarak
bir görünüme odaklanır, android:state_focused
true
olur, ancak
android:state_pressed
false
olacak. Kullanıcı daha sonra
çevirmeli kumandada ortadaki düğme (hem android:state_focused
hem de
Kullanıcı düğmeyi basılı tutarken android:state_pressed
true
olacak.
Kullanıcı düğmeyi bıraktığında yalnızca android:state_focused
kalır
true
.
car-ui-library, Theme.DeviceDefault
kaynağından türetilen bir tema kullanır. Sonuç olarak,
bu yer paylaşımı, bu kitaplığı kullanan uygulamaları ve
Theme.DeviceDefault
Alakasız bir tema kullanan uygulamaları etkilemez.
Theme.Material
gibi.
car-ui-library'da öne çıkan yayınlara odaklanın
OEM, odağın nasıl vurgulandığını kontrol etmek için bazı car-ui-library kaynaklarını geçersiz kılabilir
dikdörtgen olmayan (yuvarlak veya hap şekilli gibi) odak vurgusu içeren görünümlere
Theme.DeviceDefault
türetilmeyen bir tema kullanan uygulamalar. Bu
kaynaklar, vurguların öne çıkan teori ile tutarlı olması için
varsayılan odaklama vurgulaması çekilebilir.
(Android 11 QPR3, Android 11 Araba,
Android 12)
Aşağıdaki kaynaklar, bir görünüme odaklanılıp basılmadığını belirtmek için kullanılır:
car_ui_rotary_focus_fill_color
: Dolgu rengi.car_ui_rotary_focus_stroke_color
: Dış çizgi rengi.car_ui_rotary_focus_stroke_width
: Dış çizginin kalınlığı.
(Android 11 QPR3, Android 11 Araba,
Android 12)
Aşağıdaki kaynaklar, bir görünüme odaklanıldığını ve basıldığını belirtmek için kullanılır:
car_ui_rotary_focus_pressed_fill_color
: Dolgu rengi.car_ui_rotary_focus_pressed_stroke_color
: Dış çizgi rengi.car_ui_rotary_focus_pressed_stroke_width
: Dış çizginin kalınlığı.
Bazen bir düğmeye, kullanıcının dikkatini çekmek için ona düz bir arka plan rengi verilir. gösterildiği gibidir. Bu, odağın vurgulanmasını zorlaştırabilir.
'nı inceleyin.Bu durumda, geliştirici ikincil renkler:
- (Android 11 QPR3, Android 11 Araba,
Android 12)
car_ui_rotary_focus_fill_secondary_color
car_ui_rotary_focus_stroke_secondary_color
- (Android 12)
car_ui_rotary_focus_pressed_fill_secondary_color
car_ui_rotary_focus_pressed_stroke_secondary_color
Renklerden herhangi biri şeffaf olabilir ve iki boyut da sıfır olabilir. Örneğin, yalnızca dolgu veya ana hatlar olmasını istiyordum.
FocusArea vurgulaması
(Android 11 QPR3, Android 11 Araba,
Android 12)
FocusArea
, alt öğelerinden biri olduğunda iki tür vurgu çizebilir
emin olabilirsiniz. İstenirse her ikisi de birlikte kullanılabilir. Bu özellik şurada varsayılan olarak devre dışıdır:
AOSP'dir ancak car-ui-library kaynaklarını geçersiz kılarak etkinleştirilebilir:
car_ui_enable_focus_area_foreground_highlight
: Şunun üzerine vurgu çiz:FocusArea
ve alt öğeleri. AOSP'de bu çekilebilir, bir program içinFocusArea
civarında. OEM'lercar_ui_focus_area_foreground_highlight
çekilebilir.car_ui_enable_focus_area_background_highlight
: Vurgunun üst kısmına bir vurgu çizin:FocusArea
ancak alt öğelerinin arkasında. AOSP'de bu çekilebilir değer katı bir dolgudur. OEM'ler,car_ui_focus_area_background_highlight
çekilebilirliğini geçersiz kılabilir.
Giriş Yöntemi Düzenleyicileri
Giriş Yöntemi Düzenleyicileri (IME) giriş yöntemleridir. Örneğin, dokunmatik klavye.
(Android 11 QPR3, Android 11 Araba,
Android 12)
OEM, default_touch_input_method
dizesi kaynağıyla yer paylaşımlı olmalıdır
öğesinin ComponentName
değerini belirtmek için RotaryService
öğesinde
IME'si de kullanabilirsiniz. Örneğin, OEM, Android Automotive ile sağlanan IME'yi kullanıyorsa
proje yaşam döngüsü boyunca
com.google.android.apps.automotive.inputmethod/.InputMethodService
(Android 11 QPR3, Android 11 Araba,
Android 12)
OEM özellikle çevirmelilik için bir IME oluşturduysa, IME'yi
rotary_input_method
kaynağında ComponentName
. Bu kaynak
varsa, kullanıcı ana birimle her etkileşimde bulunduğunda belirtilen IME kullanılır.
çevirme ve Orta düğmesi aracılığıyla kontrol edebilirsiniz. Kullanıcı dokunduğunda
için önceki IME kullanılır. Geri düğmesi (ve döner menüdeki diğer düğmeler
denetleyici) IME seçimi üzerinde herhangi bir etkisi yoktur. Bu kaynak yer paylaşımlı değilse IME geçişi yapılmaz
gerçekleşir. Karton çevirmeyi desteklemediğinden kullanıcı çevirme aracını kullanarak metin giremiyor
kontrol eder.
RotaryIME
, demo amaçlı bir döner IME'dir. Temel düzeyde olsa da,
yukarıda açıklanan otomatik IME geçişini deneyin. RotaryIME
için kaynak kodu
packages/apps/Car/tests/RotaryIME/
yolunda bulunabilir.
Ekran dışı otomatik hatırlatmalar
Varsayılan olarak, kullanıcı ekranın kenarından uzaklaştırmaya çalıştığında hiçbir şey olmaz. OEM, herhangi bir şunların kombinasyonu:
AccessibilityService
tarafından tanımlanan genel bir işlem. Örneğin,GLOBAL_ACTION_BACK
KEYCODE_BACK
gibi bir anahtar kodu.- URL olarak gösterilen bir etkinliği başlatma niyeti.
(Android 11 QPR3, Android 11 Araba,
Android 12)
Bunlar, aşağıdaki dizi kaynaklarının
RotaryService
:
off_screen_nudge_global_actions
: Şu durumlarda gerçekleştirilecek genel işlemler dizisi kullanıcı ekranın kenarından yukarı, aşağı, sola veya sağa sürükler. Global olarak yapılan işlem yok bu dizinin ilgili öğesi -1 olduğunda gerçekleştirilir.off_screen_nudge_key_codes
: Yerleştirilecek tıklama etkinlikleri anahtar kodları dizisi Kullanıcı ekranın kenarından yukarı, aşağı, sola veya sağa kaydırdığında. Etkinlik yok bu dizinin ilgili öğesi 0 (KEYCODE_UNKNOWN
) ise enjekte edilir.off_screen_nudge_intents
: Şu durumlarda etkinlik başlatmak için kullanılan amaçlar dizisi kullanıcı ekranın kenarından yukarı, aşağı, sola veya sağa sürükler. Etkinlik yok bu dizinin ilgili öğesi boşsa başlatılır.
Diğer yapılandırmalar
Şu RotaryService
kaynaklarını yer paylaşımlı olarak kullanmanız gerekir:
- (Android 11 QPR3, Android 11 Araba,
Android 12)
config_showHeadsUpNotificationOnBottom
: olup olmadığını temsil eden boole değeri uyarı bildirimleri üstte değil altta gösterilmelidir. Buconfig_showHeadsUpNotificationOnBottom
ile aynı değere sahiptir Boole kaynağı:frameworks/base/packages/CarSystemUI/res/values/config.xml
- (Android 11 QPR3, Android 11 Araba,
Android 12)
notification_headsup_card_margin_horizontal
: Şunun için sol ve sağ kenar boşluğu: uyarı bildirim penceresi. Bu,notification_headsup_card_margin_horizontal
şurada kaynağı daralt:packages/apps/Car/Notification/res/values/dimens.xml
- (Android 12)
excluded_application_overlay_window_titles
: Bir dizi olarak değerlendirilmemesi gereken pencerelerin başlıklarına Bu, başlıkları içermelidirTaskViews
veyaTaskDisplayAreas
değerlerini temsil eden uygulama pencerelerinin sayısı. Varsayılan olarak bu liste yalnızca "Haritalar"ı içerir.
Şu RotaryService
kaynağını yer paylaşımlı olarak kullanabilirsiniz:
- (Android 11 QPR3, Android 11 Araba,
Android 12)
long_press_ms
: Etkinliğin kaç milisaniye olduğunu temsil eden tam sayı değeri Uzun basmayı tetiklemek için orta düğmenin basılı tutulması gerekir. Sıfır, sistemi gösterir varsayılan uzun basma zaman aşımı kullanılmalıdır. Bu, varsayılan değerdir.