Araç Ayarları (packages/apps/Car/Settings
), özellikle Android Automotive OS (AAOS) için sağlanır. Araç Ayarları, Telefon Ayarlarından (packages/apps/Settings
) farklıdır. Araç Ayarları, bazı tanıdık telefon ayarlarını içerir ancak araca özel bir görsel kullanıcı arayüzü, sürücünün dikkatini dağıtan unsurları azaltmaya yönelik optimizasyonlar ve OEM'ler için çok sayıda özelleştirme giriş noktası sunar.
Araç Ayarları'na genel bakış için aşağıdaki bölüme göz atın. Araç Ayarları hakkında daha fazla bilgi edinmek için aşağıdaki ilgili konulara da göz atın:
- Araba ayarları ekleme
- Araç ayarlarını yeniden düzenleme
- Araç Ayarlarında Dikkat Dağıtıcı Etkileri Optimize Etme
- Araç Ayarları Arama Dizine Ekleme
- Çift Bölmeli Özelleştirme
Mimari ve yönergeler
Araç Ayarlarındaki sayfaların çoğu, SettingsFragment'i genişleten bir dizi parça olarak uygulanır. Bu parçaların her biri CarSettingActivities'de tanımlanan kendi etkinliğine sahiptir. Bu statik etkinlikler, BaseCarSettingsActivity'den genişletilir. Bu kuralın birkaç istisnası vardır. Örneğin, SettingsFragment
yerine BaseFragment'i genişleten bazı özel parçalar ve CarSettingActivities dışında bulunan bazı etkinlikler. Bunların tümü istisna olarak değerlendirilmelidir (uygulanması gereken kalıplar olarak değil).
Statik tercihler
Statik tercih, XML'de Preference veya CarUiPreference etiketi kullanılarak tanımlanır. SettingsFragment
uygulaması, görüntülenecek statik tercih listesini içeren XML dosyasını tanımlamak için getPreferenceScreenResId()
yöntemini kullanır.
Dinamik tercihler
Dinamik tercihler, PreferenceGroup etiketini veya PreferenceGroup'un bir uygulamasını kullanır.
CarSettings uygulamasında dinamik tercihler, kullanıcıyı CarSettings'teki ek sayfalara yönlendiren ancak XML yerine PreferenceController aracılığıyla eklenen normal bir tercih grubunu temsil eder. Örneğin, Dil ve Giriş tercihi altındaki Klavyeleri yönet tercihi, izin verilen giriş yöntemlerine göre giriş yöntemlerini tercih sayfasına dinamik olarak ekler.
İşlem çubukları
Her ayar ekranının üst kısmında bir işlem çubuğu bulunur. Bu çubukta "geri" gezinme, ekran başlığı ve ek işlem widget'ları (ör. düğmeler ve anahtarlar) bulunabilir. Bu işlem çubukları, Android tarafından sağlanan ActionBar'a benzer ancak aslında özel görünümlerdir. Android 11 ve sonraki sürümlerde bu araç çubuğu, araç çubuğunun görünümlerini ve uygulama içeriğinin geri kalanı için bir framelayout içeren şasi temel düzenine dahil edilir.
Ek işlem widget'ları MenuItem sınıflarıdır ve ilgili SettingsFragment
veya BaseFragment
'nin onCreate
bölümünde oluşturulmalıdır. Görünürlük, durum gibi özellikler SettingsFragment
'ın iş mantığındaki ayarlayıcılar tarafından kontrol edilmelidir.
// ExampleSettingsFragment.java public class ExampleSettingsFragment extends SettingsFragment { @Override protected List<MenuItem> getToolbarMenuItems() { return Collections.singletonList(mClearConfirmButton); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mButton = new MenuItem.Builder(getContext()) .setTitle(R.string.text) .setOnClickListener(mOnClickListener) .setUxRestrictions(CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP) .build(); } private void updateState() { button.setVisible(false); } }
İşlem çubukları, Araba Ayarlarında Dikkat Dağıtıcı Etkileri Optimize Etme özelliğini destekler.
Oluşturma sırasında MenuItem.Builder
içinde UXRestrictions'i ayarlayın.
Tercih denetleyicileri
Her ayarlar sayfasında çeşitli Tercihler bulunabilir.
Bu bileşenlerin nasıl ilişkili olduğu aşağıdaki resimde gösterilmektedir:
Şekil 1. CarSettings Bileşenleri
PreferenceController
, belirli tercihlerle ilgili iş mantığını kapsayacak şekilde paketlemeye yardımcı olan yaşam döngüsü bilincine sahip bir bileşendir.
PreferenceControllers
yalnızca XML aracılığıyla ilgili tercihe eklenebilir.
// example_settings_fragment.xml <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res-auto" android:title="@string/example_settings_title"> <Preference android:key="@string/pk_example_preference_key" android:title="@string/example_preference_title" settings:controller="com.android.car.settings.example.ExamplePreferenceController"/> </PreferenceScreen>
Araba Ayarları, Java kodunda minimum düzeyde değişiklik yaparak Ayarlar hiyerarşisini değiştirmeyi kolaylaştırmak için kod aracılığıyla PreferenceController
oluşturulmasını açıkça engeller.
PreferenceController
'ün düzgün çalışması için bazı dinamik verilere ihtiyacı olabilir. Örneğin, bir uygulamanın bildirimlerini kapatan PreferenceController
işlevinin, hangi uygulamada işlem yapacağını bilmesi gerekir.
PreferenceControllers
her zaman XML'de tanımlandığından ek kurucu bağımsız değişkeni sağlamanın bir yolu yoktur. Bunun yerine bu ek değerler, PreferenceController
üzerindeki herkese açık ayarlayıcılar aracılığıyla sağlanır ve SettingsFragment
'deki use(...)
yöntemi kullanılarak ayarlanır.
// ExamplePreferenceController.java public class ExamplePreferenceContorller extends PreferenceController<Preference> { private ExampleArg mExampleArg; public ExamplePreferenceController(...) { ... } public void setExampleArg(ExampleArg exampleArg) { mExampleArg = exampleArg; } } // ExampleSettingsFragment.java public class ExampleSettingsFragment extends SettingsFragment { @Override @XmlRes protected int getPreferenceScreenResId() { Return R.xml.example_settings_fragment; } @Override public void onAttach(Context context) { ExampleArg arg = (ExampleArg) getArguments().getSerializeable(ARG_KEY); ExamplePreferenceController controller = use(ExamplePreferenceController.class, R.string.pk_example_preference_key); controller.setExampleArg(arg); } }
use(...)
yöntemi ne kadar sık kullanılırsa Java kodunda en az değişiklikle ayar hiyerarşisini yeniden düzenleyebilmek için belirlenen orijinal hedefi korumak o kadar zor olur. Bunun nedeni, mevcut snippet kodunun büyük bölümlerinin yeni oluşturulan snippet'e kopyalanması gerekmesidir. Bu işlemin zorluğunu en aza indirmenin bir yolu:
use(...)
kullanımınızı en aza indirin.use(...)
çağrısını, parçadaki tek bir yerde (örneğin,onAttach()
yönteminde) tutmaya çalışın.
Intent işleme
Araç Ayarları uygulaması tarafından işlenmesi gereken tüm intent'ler manifest dosyasında tanımlanır. Intent'ler genellikle çoğu standart Android uygulaması gibi tanımlanır ve işlenir. Tüm etkinlikler ve intent filtreleri manifest dosyasında tanımlanır.
Kök parçasını değiştirme
İsterseniz config_show_settings_root_exit_icon
simgesini kullanarak Çıkış simgesini görüntüleyebilir veya gizleyebilirsiniz.
Temayı özelleştirme
Diğer özellikleri ve kaynakları özelleştirme
Araç Ayarları uygulamasında öncelikle Theme.CarUi
'un uzantısı olan CarSettingTheme
kullanılır. Bu tema, sistemde tutarlılık sağlamak için sistem uygulamalarının görünümünü ve tarzını standartlaştırmak amacıyla kullanılır.
Tercihleri özelleştirme
Özelleştirme tercihleri şu ek konumları kapsar:
- Bazı temel tercih sınıflarının düzeni
car_preference
içinde tanımlanır ve araba derlemeleri için üst üste yerleştirilir. Temel tercih sınıfları için tüm özelleştirme düzenleri buradan değiştirilebilir. - Araba Ayarları, öncelikle
common
paketinde tanımlanan bazı özel tercihleri kullanır. Bunlar, temel tercih sınıflarından ayrı olarak Araç Ayarları modülüne yerleştirilmelidir.