Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

자동차 설정 재정렬

대부분의 경우 설정 계층 구조 재정렬은 비교적 간단한 작업이며 일반적으로 관련 환경설정과 PreferenceController를 다른 XML 파일로 이동하는 작업으로 구성됩니다. PreferenceController에서 use(...)를 사용하면 이전 SettingsFragment에서 삭제한 후 새 SettingsFragment에 추가해야 합니다.

이 도움말에서는 설정을 재정렬하는 예를 제공하여 발생할 수 있는 상황을 검토합니다.

기본 환경설정 이동

이 예에서는 한 환경설정 화면에서 다른 환경설정 화면으로 환경설정을 이동하는 방법을 설명합니다. 여기서 환경설정에는 기본 환경설정 컨트롤러만 있습니다. 이 예에서 개발자는 단위 환경설정을 홈페이지 환경설정 화면에서 시스템 환경설정 화면으로 이동합니다. 이렇게 하려면 다음 XML을 homepage_fragment.xml에서 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>

use(...)를 사용하는 환경설정 이동

다음은 데이터 경고 및 제한 프래그먼트의 모든 환경설정을 한 레벨 위인 데이터 사용량 프래그먼트로 이동하는 좀 더 복잡한 예를 살펴보겠습니다. 데이터 사용량 프래그먼트는 use 메서드를 포함하도록 DataWarningAndLimitFragment.java를 업데이트하여 생성 후 환경설정 컨트롤러에 정보를 전달합니다.

  1. 관련 XML을 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. DataWarningAndLimitFragment.java에서 use 메서드의 사용 방법을 결정합니다.
    @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);
        }
    }
    

    이 경우 use 메서드는 환경설정 컨트롤러의 네트워크 정책 편집기 및 네트워크 템플릿을 설정합니다. 이 예에서는 모든 환경설정을 이동하고 onAttach 메서드의 모든 코드가 이러한 환경설정 매개변수를 설정하는 것과 관련이 있으므로 전체 메서드 콘텐츠를 새 프래그먼트로 복사하는 것이 적절할 수 있습니다. 그러나 이는 특정 환경설정에 따라 달라집니다. 관련 인스턴스 변수도 이동해야 합니다.

    그러나 문제가 있습니다. 원본 프래그먼트는 NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE이 인수로 전달될 것으로 예상했습니다. 이 인수는 제공된 경우 인텐트에서 활동으로 전달되어야 합니다.

    필요한 이 정보를 가져오려면 newInstance 메서드를 만들어 있는 경우 템플릿을 전달하고(없으면 null 전달) DataUsageFragment의 활동을 업데이트하거나 getActivity().getIntent()를 사용하여 onAttach 메서드에서 직접 인텐트 정보를 가져옵니다. 어느 경우든 위에서 실행한 것처럼 이 메서드에 필요한 정보를 전달할 수 있습니다.

  3. 이전 프래그먼트와 XML 파일을 정리하기 전에 이전 프래그먼트에서 다른 종속 항목이나 예상되는 인텐트 작업을 식별합니다. 이 경우 오버레이 구성 값이 이전 활동을 가리키며 이전 활동은 올바른 활동을 가리키도록 업데이트해야 합니다.

계층 구조에 환경설정 화면 추가

계층 구조에 새 환경설정 화면을 추가하려면 자동차 설정 추가를 참고하세요.

새 환경설정 화면을 만든 후 위의 예를 사용하여 환경설정 계층 구조를 원하는 대로 재정렬합니다.