Genel bakış

Araç Ayarları ( packages/apps/Car/Settings ) özellikle Android Automotive OS (AAOS) için sağlanmıştır. Araç Ayarları, Telefon Ayarlarından ( packages/apps/Settings ) farklıdır. Araç Ayarları bazı tanıdık telefon ayarlarını içerirken, Araç Ayarları araç odaklı bir görsel kullanıcı arayüzü, sürücünün dikkatini dağıtacak optimizasyonlar ve OEM'ler için çok sayıda özelleştirme giriş noktası sağlar.

Aşağıda verilen Araç Ayarlarına ilişkin genel bakışa ek olarak, Araç Ayarları hakkında daha fazla bilgi edinmek için şu ilgili konulara bakın:

Mimari ve yönergeler

Araba Ayarları'ndaki sayfaların çoğu, SettingsFragment'i genişleten bir dizi parça olarak uygulanır ve her biri CarSettingActivities'de tanımlanan kendi etkinliğine sahiptir. Bu statik aktiviteler BaseCarSettingsActivity'den genişletilmiştir. Bu kuralın, SettingsFragment yerine BaseFragment'i genişleten bazı özel parçalar ve CarSettingActivities dışında bulunan bazı Activity'ler gibi birkaç istisnası olsa da bunların tümü istisna olarak kabul edilmelidir (takip edilecek modeller olarak değil).

Statik tercihler

Statik bir tercih XML'de Preference veya CarUiPreference etiketi kullanılarak tanımlanır. SettingsFragment uygulaması, hangi XML dosyasının görüntülenecek statik tercihler listesini içerdiğini 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 içindeki ek sayfalara yönlendiren ancak XML yerine Tercih Denetleyicisi aracılığıyla eklenen normal bir tercihler kümesini temsil eder. Bunun bir örneği, bu giriş yöntemlerine izin verilip verilmediğine bağlı olarak giriş yöntemlerini tercih sayfasına dinamik olarak ekleyen Diller ve Giriş tercihi altındaki Klavyeleri yönet tercihidir.

Eylem çubukları

Her ayarlar ekranının üst kısmında, "geri" gezinme, ekran başlığı ve tamamlayıcı eylem widget'larını (örneğin, düğmeler ve anahtarlar) içerebilen bir eylem çubuğu bulunur. Bu eylem çubukları, Android tarafından sağlanan ActionBar'a benzer ancak aslında özel görünümlerdir. Android 11 ve üzeri sürümlerde bu araç çubuğu, araç çubuğu görünümlerini ve uygulama içeriğinin geri kalanı için bir çerçeve düzenini içeren kasa tabanı düzenine dahil edilir.

Tamamlayıcı eylem widget'ları MenuItem sınıflarıdır ve ilgili SettingsFragment veya BaseFragment öğesinin onCreate öğesinde oluşturulmalıdır. Görünürlük, durum vb. özellikler, SettingsFragment 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);
    }
}

Eylem çubukları Araç Ayarlarında Dikkat Dağıtma Optimizasyonu desteğiyle birlikte gelir. Oluşturma sırasında MenuItem.Builder UXRestrictions'ı ayarlayın.

Tercih denetleyicileri

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

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

Araç Ayarları Bileşenleri

Şekil 1. CarSettings Bileşenleri

PreferenceController , belirli Tercihlere ilişkin iş mantığını özetlemeye yardımcı olan, yaşam döngüsüne duyarlı bir bileşendir. PreferenceControllers yalnızca ilgili Tercihe XML aracılığıyla 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>

Araç Ayarları, Java kodunda minimum değişiklikle Ayarlar hiyerarşisini değiştirmeyi kolaylaştırmak için kod aracılığıyla PreferenceController oluşturulmasını açıkça engeller.

Bir PreferenceController doğru çalışması için bazı dinamik verilere ihtiyaç duyması mümkündür. Örneğin, bir uygulamaya ilişkin bildirimleri kapatan bir PreferenceController hangi uygulamada işlem yapacağını bilmesi gerekir. PreferenceControllers her zaman XML'de tanımlandığından, ek yapıcı argümanları sağlamanın bir yolu yoktur. Bunun yerine, bu ek değerler PreferenceController üzerindeki genel ayarlayıcılar aracılığıyla sağlanır ve SettingsFragment öğesindeki 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ıklıkla kullanılırsa, Java kodunda minimum değişiklikle ayarlar hiyerarşisini yeniden düzenleyebilme şeklindeki orijinal hedefi korumak o kadar zorlaşır, çünkü mevcut parça kodunun büyük bölümlerinin yeniden düzenlenmesi gerekir. yeni oluşturulan parçaya kopyalandı. Bunu yapmanın zorluğunu en aza indirmenin bir yolu şudur:

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

Niyet yönetimi

Araç Ayarları uygulaması tarafından ele alınması gereken tüm niyetler manifest dosyasında tanımlanmıştır. Niyetler genellikle çoğu standart Android uygulaması gibi tanımlanır ve işlenir; tüm etkinlikler ve amaç filtreleri manifestte tanımlanır.

Kök parçasını değiştir

İ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ştirin

Araç Ayarları uygulaması öncelikle Theme.CarUi uzantısı olan CarSettingTheme öğesini kullanır. Bu tema, sistemde tutarlılığı sağlamak amacıyla sistem uygulamalarının görünüm ve hissini standartlaştırmak için kullanılır.

Tercihleri ​​özelleştirin

Tercihlerin özelleştirilmesi şu ek konumları kapsar:

  • Bazı temel tercih sınıflarının düzeni car_preference tanımlanır ve araba yapıları için üst üste bindirilir . Temel tercih sınıflarına ilişkin tüm özelleştirme düzenleri burada değiştirilebilir.
  • Araç Ayarları, öncelikle common pakette tanımlanan bazı özel tercihleri ​​kullanır. Bunlar, Araç Ayarları modülünde temel tercih sınıflarından ayrı olarak yerleştirilmelidir.