Genel bakış

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:

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:

CarSettings Bileşenleri

Ş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.