Araba Ayarları'ndaki çoğu sayfa, bir dizi
SettingsFragment
öğesini genişleten parçalar,
her birinin kendi etkinliği CarSettingActivities
içinde tanımlanmış olmalıdır.
Bu statik etkinlikler BaseCarSettingsActivity
tarihinden itibaren uzatıldı.
Bu ayarlara ek olarak, diğer sistem uygulamalarından tercihleri ekleyebilirsiniz:
Araba Ayarları'nda görünür.
Araba Ayarları'nda yeni bir tercih ekleme
Yeni bir ayar eklemek için:
- Bir XML dosyası tanımlayın:
- Tüm tercihlerin
android:key
öğesini tanımladığından emin olun. Liste Anahtarların kadarıpreference_keys.xml
konumunda tutuluyor. Tercihler anahtarlar benzersiz olmalıdır. - Arama dizine ekleme amacıyla, tercih ekranlarında ayrıca
tanımlı bir
android:key
. Tercih ekranı tuşlarının listesipreference_screen_keys.xml
konumunda sağlanıyor. Tercih ekran anahtarları da benzersiz olmalıdır. - Tercih yalnızca statik bilgileri gösteriyorsa (örneğin,
özel iş mantığı yoksa), tercih denetleyicisini
com.android.car.settings.common.DefaultRestrictionsPreferenceController
- Tercih iş mantığı gerektiriyorsa tercihi ayarlayın yeni bir tercihli denetleyici adıyla değiştirin.
- Tüm tercihlerin
- (Gerekirse) Tercih denetleyicisini uygun
PreferenceController
paketine sahip olacaksınız. Gerekirse Javadoc'a bakın. getPreferenceScreenResId
ürününün şu değeri döndüren bir parça oluşturun: 1. Adım'da tanımlanan XML dosyası oluşturun.CarSettingActivities
içinde etkinlik oluşturun uzayanBaseCarSettingsActivity
vegetInitialFragment()
uygulayarak parçayı döndürerek iyi bir örnektir.AndroidManifest.xml
öğesini, 4. adımda tanımlanan etkinliği içerecek şekilde güncelleyin.
Örnek
Aşağıdaki materyalde bu işlem gösterilmektedir.
demo_fragment.xml
adlı bir XML dosyası tanımlayın:<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res-auto" android:title="@string/demo_label" android:key="@string/psk_demo"> <Preference android:icon="@drawable/ic_settings_demo_preference_1" android:key="@string/pk_demo_preference_1" android:title="@string/demo_preference_1_title" settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController"> <intent android:targetPackage="com.android.car.settings" android:targetClass="com.android.car.settings.common.CarSettingActivities$DemoSetting1Activity"/> </Preference> <Preference android:icon="@drawable/ic_settings_demo_preference_2" android:key="@string/pk_demo_preference_2" android:title="@string/demo_preference_2_title" settings:controller="com.android.car.settings.example.MyCustomRestrictionsPreferenceController"> <intent android:targetPackage="com.android.car.settings" android:targetClass="com.android.car.settings.common.CarSettingActivities$DemoSetting2Activity"/> </Preference> </PreferenceScreen>
- Tercih anahtarlarını
preference_keys
öğesine ekleyin:<resources> [...] <string name="pk_demo_preference_1" translatable="false">demo_preference_1</string> <string name="pk_demo_preference_2" translatable="false">demo_preference_2</string> </resources>
- Tercih ekranı anahtarını
preference_screen_keys.xml
öğesine ekleyin:<resources> [...] <string name="psk_demo" translatable="false">demo_screen</string> </resources>
İlk örnek tercih için
DefaultRestrictionsPreferenceController
değerini kullanın. İkinci tercih için tanımlanması gereken özel bir tercih denetleyicisi kullanın. Bu örnekte, bu tercihi yalnızca mevcut yönetici kullanıcılar için özelleştirebilirsiniz. Bunun için aşağıdaki özel denetleyiciyi tanımlayın:public class MyCustomRestrictionsPreferenceController extends PreferenceController<Preference> { private final UserManager mUserManager; public MyCustomRestrictionsPreferenceController(Context context, String preferenceKey, FragmentController fragmentController, CarUxRestrictions uxRestrictions) { super(context, preferenceKey, fragmentController, uxRestrictions); mUserManager = UserManager.get(context); } @Override protected Class<Preference> getPreferenceType() { return Preference.class; } @Override public int getAvailabilityStatus() { return mUserManager.isAdminUser() ? AVAILABLE : DISABLED_FOR_USER; } }
- Parça oluşturmak için
getPreferenceScreenResId
öğesini geçersiz kılın: - Yeni parçayı tutmak için
CarSettingActivities
içinde bir etkinlik oluşturun: - Manifest dosyasını yeni etkinlikle güncelleyin:
- Doğrudan CarSettings uygulamasında uygulanmaz (ör. (OEM'ler tarafından uygulanan bir ayarın eklenmesi).
- CarSettings uygulamasında görünür.
- Etkinliği yerleştirilen ayar olarak işaretlemek için etkinliği tıklayın.
- CarSettings uygulamasına hangi kategoriye ait olduğunu söyleyin. Kategori
sabit,
CategoryKey
içinde tanımlanır. ve yerleştirilen ayarın CarSettings'in hangi düzeyinde olduğunu belirtmek için kullanılır. yer alır. Bu kategorideCategoryKey
olarak değişir, ancak OEM'lerin tanımlaması için herhangi bir kısıtlama yoktur. yardımcı olur. - (isteğe bağlı) Ayar gösterildiğinde özet metni ekleyin:
<activity android:name="Settings$DemoSettingsActivity" <!-- Mark the activity as an injected setting --> <intent-filter> <action android:name="com.android.settings.action.EXTRA_SETTINGS"/> </intent-filter> <!-- Tell CarSettings app which category it belongs to --> <meta-data android:name="com.android.settings.category" android:value="com.android.settings.category.demo_category"/> <!-- Tell CarSettings the what the preference title should be --> <meta-data android:name="com.android.settings.title" android:value="@string/app_name" /> <!-- Optional: specify the icon to show with the preference --> <meta-data android:name="com.android.settings.icon" android:resource="@drawable/ic_demo" android:value="true"/> <!-- Optional: Add a summary text when the string is displayed --> <meta-data android:name="com.android.settings.summary" android:resource="@string/demo_summary"/> </activity>
public class DemoFragment extends SettingsFragment { @Override @XmlRes protected int getPreferenceScreenResId() { return R.xml.demo_fragment; } }
public class CarSettingActivities { [...] public static class DemoActivity extends BaseCarSettingsActivity { @Nullable @Override protected Fragment getInitialFragment() { return new DemoFragment(); } } }
<application [...] <activity android:name=".common.CarSettingActivities$DemoActivity" android:exported="true"> <meta-data android:name="distractionOptimized" android:value="true"/> </activity> [...] </application>
Araba Ayarları'ndan harici bir amaç tercihi ekleyin
Yerleştirilen tercihlere alternatif olarak, doğrudan Araba Ayarları'na bir tercih ekleyerek başka bir uygulama. Bu, yalnızca bir tercih ekleyerek harici bir harici web paylaşımına dönüşen intent işlemi içeren bir tercih ekranına uygulamasını indirin. Araba Ayarları'ndaki diğer tercihler gibi bu tercihler de aynı XML özelliklerine sahip olmalıdır.
<Preference android:key="@string/pk_demo_preference" android:title="@string/demo_preference_title" android:summary="@string/demo_preference_summary" settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController"> <intent android:action="android.intent.action.DEMO_ACTION"/> </Preference>
Yerleştirilen bir tercih ekle
Yerleştirilen tercihler, harici veya dahili yönlendirmelere yönlendiren amaçlar içeriyor yardımcı olur. Örneğin, Ayarlar sayfasındaki Google ayar öğesi ana sayfa eklenmiş bir tercihtir. Yerleştirilen tercihler, şu durumlardan herhangi biri doğru olduğunda kullanışlıdır. Ayar:
Yerleştirilen bir ayar olarak bir etkinliği yapılandırmak için:
Yerleştirilen ayarın belirli bir sayfada görünmesini sağlamak için CarSettings uygulamasında, aşağıdaki örnek kodu XML'e ekleyin, değişkenlerine ekleyin:
<com.android.car.settings.common.LogicalPreferenceGroup <!-- Replace key string --> android:key="@string/pk_system_extra_settings" <!-- Indicates the preferences in the group should be injected in. ExtraSettingsPreferenceController contains the logic to pull in injected preferences. --> settings:controller="com.android.settings.common.ExtraSettingsPreferenceController"> <!-- Tells the controller what activities should be pulled into this preference group. --> <intent android:action="com.android.settings.action.EXTRA_SETTINGS"> <!-- Name and value should match the metadata in your activity --> <extra android:name="com.android.settings.category" android:value="com.android.settings.category.demo_category"/> </intent> </com.android.car.settings.common.LogicalPreferenceGroup>