Autoeinstellungen neu anordnen

Die Neuordnung der Einstellungen ist in den meisten Fällen relativ einfach und besteht in der Regel darin, die entsprechende Einstellung und PreferenceController in eine andere XML-Datei zu verschieben. Wenn die PreferenceController use(...) verwendet, entfernen Sie sie aus der vorherigen SettingsFragment und fügen Sie sie der neuen SettingsFragment hinzu.

Auf dieser Seite finden Sie Beispiele für die Neuanordnung von Einstellungen, um mögliche Situationen zu überprüfen.

Grundeinstellung verschieben

In diesem Beispiel wird erläutert, wie Sie eine Einstellung von einem Einstellungsbildschirm zu einem anderen verschieben, in dem die Einstellung nur einen Standardeinstellungscontroller hat. In diesem Beispiel verschieben Sie die Einstellung „Einheiten“ vom Bildschirm „Startseite“ auf den Bildschirm „System“. Verschieben Sie dazu die folgende XML-Datei von 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>

Einstellung mit „use(...)“ verschieben

Im folgenden, etwas komplexeren Beispiel werden alle Einstellungen im Fragment „Datenwarnung und -limit“ um eine Ebene in das Fragment „Datennutzung“ verschoben. Dadurch wird DataWarningAndLimitFragment.java um die Methode use aktualisiert, um nach dem Erstellen Informationen an die Einstellungscontroller weiterzugeben.

  1. Verschieben Sie die entsprechende XML-Datei an den gewünschten Speicherort 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. Legen Sie in DataWarningAndLimitFragment.java fest, wie die Methode use 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 wird mit der use-Methode der Editor für Netzwerkrichtlinien und die Netzwerkvorlage für die Einstellungscontroller festgelegt. Da in diesem Beispiel alle Einstellungen verschoben werden und der gesamte Code in der onAttach-Methode für die Einstellung dieser Einstellungsparameter relevant ist, ist es sinnvoll, den gesamten Methodeninhalt in das neue Fragment zu kopieren. Das hängt jedoch von der jeweiligen Einstellung ab. Außerdem müssen Sie die relevanten Instanzvariablen verschieben.

    Es gibt jedoch ein Problem. Im ursprünglichen Fragment wird erwartet, dass NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE als Argument übergeben wird. Dieses Argument sollte von der Absicht an die Aktivität übergeben werden (falls vorhanden).

    Um diese erforderlichen Informationen zu erhalten, können Sie entweder eine newInstance-Methode erstellen und die Vorlage übergeben, falls vorhanden (andernfalls „null“ übergeben), und dann die Aktivität für die DataUsageFragment aktualisieren oder die Intent-Informationen direkt in der onAttach-Methode mithilfe von getActivity().getIntent() abrufen. In beiden Fällen kannst du die erforderlichen Informationen für diese Methode wie oben beschrieben übergeben.

  3. Identifizieren Sie alle anderen Abhängigkeiten oder erwarteten Intent-Aktionen 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, damit sie auf die richtige Aktivität verweist.

Hierarchie um einen Einstellungsbildschirm ergänzen

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

Nachdem Sie den neuen Einstellungsbildschirm erstellt haben, können Sie die Einstellungshierarchie anhand der Beispiele oben nach Belieben neu anordnen.