Die meisten Seiten in den Autoeinstellungen sind
Fragmente, die SettingsFragment
,
Jeder von ihnen hat ihre eigene Aktivität in CarSettingActivities
.
Diese statischen Aktivitäten gelten ab dem BaseCarSettingsActivity
.
Zusätzlich zu diesen Einstellungen können Sie Einstellungen aus anderen System-Apps hinzufügen,
die in den Autoeinstellungen angezeigt werden.
Neue Einstellung in den Autoeinstellungen hinzufügen
So fügen Sie eine neue Einstellung hinzu:
- Definieren Sie eine XML-Datei:
<ph type="x-smartling-placeholder">
- </ph>
- Achten Sie darauf, dass für alle Einstellungen „
android:key
“ definiert ist. Die Liste von Schlüsseln wird inpreference_keys.xml
verwaltet. Einstellungen Schlüssel müssen eindeutig sein. - Für die Indexierung der Suche sollten auf den Bildschirmen für Einstellungen außerdem
Eine definierte
android:key
. Die Liste der bevorzugten Bildschirmtasten wird inpreference_screen_keys.xml
verwaltet. Einstellung Bildschirmtasten müssen ebenfalls eindeutig sein. - Wenn in der Einstellung nur statische Informationen angezeigt werden (z. B.
keine spezielle Geschäftslogik), legen Sie den bevorzugten Controller als
com.android.car.settings.common.DefaultRestrictionsPreferenceController
- Wenn für die Einstellung Geschäftslogik erforderlich ist, legen Sie die Einstellung fest. Controller mit einem neuen bevorzugten Controller-Namen.
- Achten Sie darauf, dass für alle Einstellungen „
- (Falls erforderlich) Erstellen Sie den bevorzugten Controller im entsprechenden Bereich
-Paket, das
PreferenceController
erweitert. Weitere Informationen finden Sie in der Javadoc. - Erstellt ein Fragment, bei dem
getPreferenceScreenResId
den Wert XML-Datei, die in Schritt 1 definiert wurde. - Aktivität in
CarSettingActivities
erstellen die sichBaseCarSettingsActivity
und danngetInitialFragment()
implementieren, wodurch das Fragment zurückgegeben wird wie in Schritt 3 definiert. - Aktualisieren Sie
AndroidManifest.xml
, um die in Schritt 4 definierte Aktivität aufzunehmen.
Beispiel
Das folgende Material veranschaulicht diesen Prozess.
- Definieren Sie eine XML-Datei mit dem Namen
demo_fragment.xml
:<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>
- Fügen Sie die Einstellungsschlüssel zu
preference_keys
hinzu:<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>
- Fügen Sie
preference_screen_keys.xml
die bevorzugte Bildschirmtaste hinzu:<resources> [...] <string name="psk_demo" translatable="false">demo_screen</string> </resources>
Verwenden Sie für die erste Beispieleinstellung
DefaultRestrictionsPreferenceController
. Verwenden Sie für die zweite Präferenz einen benutzerdefinierten Controller, der definiert werden muss. In diesem Beispiel können Sie diese Einstellung nur für verfügbare Administratoren anpassen. Definieren Sie dazu den folgenden benutzerdefinierten Controller: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; } }
- Überschreiben Sie
getPreferenceScreenResId
, um ein Fragment zu erstellen: - Erstellen Sie eine Aktivität in
CarSettingActivities
, um das neue Fragment zu speichern: - Aktualisieren Sie die Manifestdatei mit der neuen Aktivität:
- nicht direkt in der CarSettings-App implementiert ist (z. B. das Einfügen einer Einstellung, die von OEMs implementiert wurde).
- Sollte in der App „CarSettings“ angezeigt werden.
- Fügen Sie einen Intent-Filter hinzu, um die Aktivität als eingefügte Einstellung zu markieren. der Aktivität.
- Teilen Sie der CarSettings App mit, zu welcher Kategorie sie gehört. Die Kategorie ist ein
Konstante, definiert in
CategoryKey
, und gibt an, auf welcher Ebene von CarSettings die eingefügte Einstellung angezeigt werden soll. Wir stellen dort eine Reihe von Kategorien zur Verfügung,CategoryKey
, aber es gibt keine Einschränkungen für OEMs. eigenen Kategorien zuordnen. - Optional: Geben Sie eine Zusammenfassung ein, wenn die Einstellung angezeigt wird:
<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>
Externe Intent-Einstellung in den Autoeinstellungen hinzufügen
Als Alternative zu eingefügten Präferenzen ist es auch möglich, können Sie direkt in den Autoeinstellungen eine Einstellung eine andere App. Dazu können Sie einfach eine Einstellung hinzufügen, mit einer Intent-Aktion, die zu einem externen Genau wie andere Einstellungen in den Autoeinstellungen werden auch diese Einstellungen dieselben XML-Attribute zur Verfügung stehen.
<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>
Injizierte Einstellung hinzufügen
Injizierte Präferenzen enthalten Intents, die zu externen oder internen Zwecken führen Aktivitäten. Beispiel: Die Einstellung Google in den Einstellungen „Homepage“ ist eine eingefügte Präferenz. Eingefügte Präferenzen sind besonders ist nützlich, wenn einer der folgenden Punkte zutrifft. Die Einstellung:
So konfigurieren Sie eine Aktivität als eingefügte Einstellung:
Damit die eingefügte Einstellung auf einer bestimmten Seite im App „CarSettings“ den folgenden Beispielcode in die XML-Datei ein, indem Sie Variablen verfügbar sind:
<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>