Fahrzeugeinstellungen neu anordnen

Die Neuordnung der Einstellungshierarchie ist größtenteils relativ einfach und besteht normalerweise darin, die relevanten Einstellungen und PreferenceController in eine andere XML-Datei zu verschieben. Wenn der PreferenceController use(...) verwendet, müssen Sie ihn unbedingt aus dem vorherigen SettingsFragment entfernen und zum neuen SettingsFragment hinzufügen.

Auf dieser Seite finden Sie Beispiele für die Neuordnung von Einstellungen, um eventuell auftretende Situationen zu überprüfen.

Verschieben Sie eine Grundeinstellung

In diesem Beispiel wird erläutert, wie eine Einstellung von einem Einstellungsbildschirm auf einen anderen verschoben wird, in dem die Einstellung nur über einen Standardeinstellungscontroller verfügt. In diesem Beispiel verschieben Sie die Einheiten-Einstellung vom Homepage-Einstellungsbildschirm in den System-Einstellungsbildschirm. Verschieben Sie dazu den folgenden XML-Code aus homepage_fragment.xml an den entsprechenden Speicherort in system_settings_fragment.xml :

<Preference
        android:icon="@drawable/ic_settings_units"
        android:key="@string/pk_units_settings_entry"
        android:title="@string/units_settings"
        settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController">
        <intent android:targetPackage="com.android.car.settings"
            android:targetClass="com.android.car.settings.common.CarSettingActivities$UnitsSettingsActivity"/>
    </Preference>

Verschieben Sie eine Einstellung, die use(...) verwendet

Betrachten Sie das folgende komplexere Beispiel, das alle Einstellungen im Fragment „Data Warning & Limit“ um eine Ebene nach oben in das Fragment „Data Usage“ verschiebt, das DataWarningAndLimitFragment.java so aktualisiert, dass es die Methode use enthält, um nach der Erstellung Informationen an die Einstellungscontroller zu übergeben.

  1. Verschieben Sie das relevante XML an die gewünschte Stelle in data_usage_fragment.xml :
    <Preference
            android:key="@string/pk_data_usage_cycle"
            android:title="@string/app_usage_cycle"
            settings:controller="com.android.car.settings.datausage.CycleResetDayOfMonthPickerPreferenceController"/>
        <com.android.car.settings.common.LogicalPreferenceGroup
            android:key="@string/pk_data_warning_group"
            settings:controller="com.android.car.settings.datausage.DataWarningPreferenceController">
            <SwitchPreference
                android:key="@string/pk_data_set_warning"
                android:title="@string/set_data_warning"/>
            <Preference
                android:key="@string/pk_data_warning"
                android:title="@string/data_warning"/>
        </com.android.car.settings.common.LogicalPreferenceGroup>
        <com.android.car.settings.common.LogicalPreferenceGroup
            android:key="@string/pk_data_limit_group"
            settings:controller="com.android.car.settings.datausage.DataLimitPreferenceController">
            <SwitchPreference
                android:key="@string/pk_data_set_limit"
                android:title="@string/set_data_limit"/>
            <Preference
                android:key="@string/pk_data_limit"
                android:title="@string/data_limit"/>
        </com.android.car.settings.common.LogicalPreferenceGroup>
    
  2. Bestimmen Sie in DataWarningAndLimitFragment.java , wie die use Methode verwendet wird.
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    
        mPolicyEditor = new NetworkPolicyEditor(NetworkPolicyManager.from(context));
        mNetworkTemplate = getArguments().getParcelable(
                NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE);
        if (mNetworkTemplate == null) {
            mTelephonyManager = context.getSystemService(TelephonyManager.class);
            mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
            mNetworkTemplate = DataUsageUtils.getMobileNetworkTemplate(mTelephonyManager,
                    DataUsageUtils.getDefaultSubscriptionId(mSubscriptionManager));
        }
    
        // Loads the current policies to the policy editor cache.
        mPolicyEditor.read();
    
        List<DataWarningAndLimitBasePreferenceController> preferenceControllers =
                Arrays.asList(
                       use(CycleResetDayOfMonthPickerPreferenceController.class,
                                R.string.pk_data_usage_cycle),
                       use(DataWarningPreferenceController.class, R.string.pk_data_warning_group),
                       use(DataLimitPreferenceController.class, R.string.pk_data_limit_group));
    
        for (DataWarningAndLimitBasePreferenceController preferenceController :
                preferenceControllers) {
            preferenceController.setNetworkPolicyEditor(mPolicyEditor);
            preferenceController.setNetworkTemplate(mNetworkTemplate);
        }
    }
    

    In diesem Fall legt die use den Netzwerkrichtlinieneditor und die Netzwerkvorlage für die Präferenzcontroller fest. Da in diesem Beispiel alle Einstellungen verschoben werden und der gesamte Code in der onAttach Methode für das Festlegen dieser Einstellungsparameter relevant ist, wäre es angebracht, den gesamten Methodeninhalt in das neue Fragment zu kopieren. Dies variiert jedoch je nach konkreter Präferenz. Sie müssen auch die relevanten Instanzvariablen verschieben.

    Allerdings gibt es eine Komplikation. Das ursprüngliche Fragment erwartete, dass NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE als Argument übergeben wird, das von der Absicht zur Aktivität kommen sollte (sofern bereitgestellt).

    Um diese benötigten Informationen zu erhalten, erstellen Sie entweder eine newInstance Methode und übergeben Sie die Vorlage, sofern vorhanden (andernfalls übergeben Sie null) und aktualisieren Sie dann die Aktivität für das DataUsageFragment oder rufen Sie die Absichtsinformationen direkt in der onAttach Methode ab, indem Sie getActivity().getIntent() . In beiden Fällen können Sie die erforderlichen Informationen für diese Methode wie oben beschrieben eingeben.

  3. Identifizieren Sie alle anderen Abhängigkeiten oder erwarteten Absichtsaktionen im alten Fragment, bevor Sie die alten Fragmente und XML-Dateien bereinigen. In diesem Fall verweist ein Overlay-Konfigurationswert auf die alte Aktivität, die aktualisiert werden muss, um auf die richtige Aktivität zu verweisen.

Fügen Sie der Hierarchie einen Einstellungsbildschirm hinzu

Informationen zum Hinzufügen eines neuen Einstellungsbildschirms zur Hierarchie finden Sie unter Fahrzeugeinstellungen hinzufügen .

Nachdem Sie den neuen Präferenzbildschirm erstellt haben, verwenden Sie die obigen Beispiele, um die Präferenzhierarchie wie gewünscht neu anzuordnen.