Genel bakış

Araba Ayarları (packages/apps/Car/Settings), özellikle Android Automotive OS (AAOS). Araba Ayarları, Telefon Ayarları'ndan farklı (packages/apps/Settings). Araba Ayarları bazı tanıdık telefon ayarları içerir ancak Araba Ayarları, arabaya uygun bir görsel kullanıcı arayüzü, sürücünün dikkatini dağıtan unsurlar için optimizasyonlar sunar. ve OEM'ler için çok sayıda özelleştirme giriş noktası bulunuyor.

Aşağıda sağlanan Araba Ayarları bölümüne genel bakışın yanı sıra aşağıdaki ilgili Araba Ayarları hakkında daha fazla bilgi edinebileceğiniz konular:

Mimari ve yönergeler

Araba Ayarları'ndaki sayfaların çoğu, bir dizi parça olarak uygulanmış SettingsFragment'ı genişleten, her birinin kendine ait etkinlikleri CarSettingEvents. Bu statik etkinlikler BaseCarSettingsActivity öğesinden genişletilir. Bu kuralın bazı istisnaları vardır. Örneğin, SettingsFragment yerine BaseFragment ve CarSettingEvents dışında kalan bazı Etkinlikler. Bunların tümü istisna olarak kabul edilmelidir (izlenecek kalıplar olarak değil).

Statik tercihler

Statik bir tercih, XML'de Tercih veya CarUiPreference kapanış etiketinin hemen öncesine yapıştırın. SettingsFragment uygulaması, getPreferenceScreenResId() yöntemini kullanın.

Dinamik tercihler

Dinamik tercihler, PreferenceGroup kullanır etiketini veya PreferenceGroup uygulamasını kullanmanın bir yoludur.

CarSettings uygulamasında dinamik tercihler, normal bir grup kullanıcıyı CarSettings içindeki ek sayfalara yönlendiren tercihleri, ancak Tercih Denetleyicisi yerine dosya erişimini kullanın. Klavyeleri yönetme Diller ve Dinamik olarak giriş ekleyen giriş tercihi bu giriş yöntemlerinin kullanılabilir olup olmadığına bağlı olarak, tercih sayfasına izin verilmez.

İşlem çubukları

Her ayar ekranının üst kısmında, içinde "geri" gezinme, ekran başlığı ve ek işlem widget'ları (örneğin, düğmeler ve anahtarlar). Bu işlem çubukları İşlem Çubuğu'na benzer ancak aslında özel görünümlerdir. Android 11 ve sonraki sürümlerde bu araç çubuğu, araç çubuğu ve uygulama içeriğinin geri kalanı için bir çerçeve düzeni.

Ek işlem widget'ları, MenuItem sınıflarıdır ve ilgili SettingsFragment veya onCreate öğesinin BaseFragment. Görünürlük, durum vb. özellikler SettingsFragment iş mantığına göre belirleyiciler 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ında Araba Ayarları'nda Dikkat Dağılması Optimizasyonu. İçerik üretmeyle ilgili olarak MenuItem.Builder içindeki UXRestrictions'i belirleyin.

Tercih denetleyicileri

Her ayar sayfasında çeşitli ayarlar Tercihler.

Bu bileşenlerin birbiriyle nasıl ilişkili olduğunu öğrenmek için aşağıdaki resme bakın:

CarSettings Bileşenleri

Şekil 1. CarSettings Bileşenleri

PreferenceController, yaşam döngüsüne duyarlı bir bileşendir ve Belirli Tercihlere ilişkin iş mantığını özetleyebilir. PreferenceControllers, yalnızca ilgili Tercih'e eklenebilir. XML.

// 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ı, PreferenceController oluşturulmasını açıkça engelliyor kod kullanarak ayarlar hiyerarşisini çok az çabayla değiştirmeyi kolaylaştırmak bazı değişiklikler var.

PreferenceController için dinamik veriler gerekebilir düzgün şekilde çalışmasını sağlamalısınız. Örneğin, kapanan bir PreferenceController bildirimlerinin hangi uygulamada işlem yapacağını bilmesi gerekir. PreferenceControllers her zaman XML'de tanımlandığından için ek kurucu bağımsız değişkenleri sağlamanın bir yolunu sunar. Bunun yerine bu ek değerler PreferenceController aracılığıyla herkese açık setler aracılığıyla sağlanır ve SettingsFragment aracılığıyla use(...) yöntemi.

// 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 yöntemi korumak da o kadar zor hale gelir. asıl hedef, ayarlar hiyerarşisini en az düzeyde değişiklik yaparak mevcut parça kodunun büyük bölümlerinin Google’a kopyalanması gerektiğinden, yeni oluşturulan parçaya geri dönelim. Bunu yapmanın zorluğunu en aza indirmenin bir yolu şudur:

  • use(...) kullanımınızı en aza indirin.
  • use(...) için yapılan her çağrıyı parçada tek bir yerde tutmaya çalışın (örneğin, onAttach() yönteminde).
ziyaret edin.

Amaç işleme

Tüm amaçlar tarafından yapılması gereken ayarlar manifest dosyası olarak kaydedebilirsiniz. Amaçlar genellikle çoğu standart Android uygulaması gibi tanımlanır ve işlenir. Manifest dosyasında tanımlanan tüm etkinlikler ve intent filtreleriyle

Kök parçayı değiştirme

İstenirse Çıkış simgesi config_show_settings_root_exit_icon kullanılarak görüntülenebilir veya gizlenebilir.

Temayı özelleştirin

Diğer özellikleri ve kaynakları özelleştirme

Araba Ayarları uygulaması çoğunlukla CarSettingTheme kullanır. ve Theme.CarUi uzantısıdır. Bu tema, tablodaki sistemde tutarlılığı sağlamak için sistem uygulamalarının görünümünü ve hissini verir.

Tercihleri özelleştirin

Tercihlerin özelleştirilmesi aşağıdaki ek konumları da kapsar:

  • Bazı temel tercih sınıflarının düzeni car_preference içinde tanımlanmıştır ve yer paylaşımlı en iyi uygulamaları paylaşacağım. Temel tercih sınıflarına ilişkin özelleştirme düzenleri burada değiştirilir.
  • Araba Ayarları, öncelikle common. paketinden yararlanın. Bunlar, temel tercih sınıflarıdır.