Autoeinstellungen neu anordnen

Die Neuanordnung der Einstellungshierarchie ist größtenteils relativ und besteht in der Regel darin, die relevanten Präferenzen PreferenceController in eine andere XML-Datei um. Wenn die PreferenceController verwendet use(...), entfernen Sie aus dem vorherigen SettingsFragment und fügen sie dem neuen SettingsFragment

Auf dieser Seite finden Sie Beispiele für die Neuanordnung von Einstellungen, um Situationen zu identifizieren, auftreten können.

Grundlegende Einstellung verschieben

In diesem Beispiel wird erläutert, wie Sie eine Einstellung von einem Bildschirm mit Einstellungen auf einen anderen verschieben. in denen die Einstellung nur einen Standard-Controller hat. In diesem Beispiel Verschieben Sie die Einheiteneinstellungen vom Bildschirm mit den Einstellungen für die Startseite in die Systemeinstellungen. Bildschirm. Verschieben Sie dazu den folgenden XML-Code aus homepage_fragment.xml in den Entsprechender Ort 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>

Eine Einstellung verschieben, für die Folgendes verwendet wird:

Betrachten Sie das folgende komplexere Beispiel, bei dem alle Einstellungen im Abschnitt „Datenwarnung“ und Beschränken Sie das Fragment auf eine Ebene auf das Fragment für die Datennutzung, das aktualisiert DataWarningAndLimitFragment.java, um die Methode use einzuschließen um nach der Konstruktion Informationen an die bevorzugten Controller zu übergeben.

  1. Verschiebe 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. Bestimmen Sie in DataWarningAndLimitFragment.java, wie die 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 Methode use der Editor für Netzwerkrichtlinien festgelegt. und Netzwerkvorlage für die bevorzugten Controller. Da in diesem Beispiel alle der Einstellungen und der gesamte Code in der Methode onAttach ist relevant für wenn Sie diese Einstellungsparameter festlegen, in das neue Fragment ein. Dies hängt jedoch davon ab, bestimmte Präferenz. Außerdem müssen Sie die relevanten Instanzvariablen verschieben.

    Es gibt jedoch eine Komplikation. Das erwartete ursprüngliche Fragment NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE wird als Argument übergeben, das vom Intent an die Aktivität übergeben werden sollte. (sofern angegeben).

    Erstellen Sie entweder ein newInstance-Objekt, um diese erforderlichen Informationen zu erhalten. übergeben und, sofern vorhanden, die Vorlage übergeben (andernfalls null) und dann die Aktivität für DataUsageFragment aktualisieren oder den Intent abrufen Informationen direkt in der onAttach-Methode mithilfe der getActivity().getIntent(). In beiden Fällen können Sie das Feld Informationen für diese Methode benötigen, wie Sie es oben getan haben.

  3. Identifizieren Sie alle anderen Abhängigkeiten oder erwarteten Intent-Aktionen im alten Fragment, bevor Bereinigen der alten Fragmente und XML-Dateien. In diesem Fall ein Overlay config-Wert auf die alte Aktivität, die aktualisiert werden muss, damit sie auf die richtige Aktivität zu finden.

Bildschirm mit Einstellungen zur Hierarchie hinzufügen

Informationen dazu, wie Sie der Hierarchie einen neuen Einstellungsbildschirm hinzufügen, finden Sie unter Autoeinstellungen hinzufügen.

Nachdem Sie die neue Einstellung erstellt haben, ordnen Sie die bevorzugte Hierarchie.