Sắp xếp lại cài đặt ô tô

Đối với hầu hết các phần, việc sắp xếp lại hệ thống phân cấp Cài đặt tương đối đơn giản và thường bao gồm việc di chuyển tùy chọn và PreferenceController có liên quan sang một tệp XML khác. Nếu PreferenceController sử dụng use(...) , hãy nhớ xóa nó khỏi SettingsFragment trước đó và thêm nó vào SettingsFragment mới.

Trang này cung cấp các ví dụ về sắp xếp lại Cài đặt để xem xét các tình huống có thể xảy ra.

Di chuyển tùy chọn cơ bản

Ví dụ này giải thích cách di chuyển tùy chọn từ màn hình tùy chọn này sang màn hình tùy chọn khác, trong đó tùy chọn chỉ có bộ điều khiển tùy chọn mặc định. Trong ví dụ này, bạn di chuyển tùy chọn Đơn vị từ màn hình tùy chọn Trang chủ sang màn hình tùy chọn Hệ thống. Để làm như vậy, hãy di chuyển XML sau từ homepage_fragment.xml vào vị trí thích hợp trong 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>

Di chuyển tùy chọn sử dụng use(...)

Hãy xem xét ví dụ phức tạp hơn sau đây di chuyển tất cả các tùy chọn trong phân đoạn Cảnh báo & Giới hạn dữ liệu lên một cấp thành phân đoạn Sử dụng dữ liệu, cập nhật DataWarningAndLimitFragment.java để bao gồm phương thức use nhằm truyền thông tin vào bộ điều khiển tùy chọn sau khi xây dựng.

  1. Di chuyển XML có liên quan đến vị trí mong muốn trong 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. Trong DataWarningAndLimitFragment.java , hãy xác định cách sử dụng phương thức 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);
        }
    }
    

    Trong trường hợp này, phương thức use sẽ đặt trình soạn thảo chính sách mạng và mẫu mạng cho bộ điều khiển tùy chọn. Vì ví dụ này di chuyển tất cả các tùy chọn và tất cả mã trong phương thức onAttach đều có liên quan đến việc đặt các tham số tùy chọn này, nên việc sao chép toàn bộ nội dung phương thức vào đoạn mới là phù hợp. Tuy nhiên, điều này thay đổi tùy thuộc vào sở thích cụ thể. Bạn cũng cần phải di chuyển qua các biến thể hiện có liên quan.

    Tuy nhiên, có một sự phức tạp. Đoạn ban đầu dự kiến NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE sẽ được chuyển vào dưới dạng đối số, đối số này sẽ xuất phát từ mục đích của hoạt động (khi được cung cấp).

    Để có được thông tin cần thiết này, hãy tạo một phương thức newInstance và truyền vào mẫu khi có mặt (nếu không thì chuyển thành null), sau đó cập nhật hoạt động cho DataUsageFragment hoặc lấy thông tin ý định trực tiếp trong phương thức onAttach bằng cách sử dụng getActivity().getIntent() . Trong cả hai trường hợp, bạn có thể chuyển thông tin cần thiết cho phương pháp này như bạn đã làm ở trên.

  3. Xác định bất kỳ phần phụ thuộc nào khác hoặc hành động có ý định dự kiến ​​trong phân đoạn cũ trước khi dọn sạch các phân đoạn cũ và tệp XML. Trong trường hợp này, giá trị cấu hình lớp phủ trỏ đến hoạt động cũ. Giá trị này phải được cập nhật để trỏ đến hoạt động chính xác.

Thêm màn hình tùy chọn vào hệ thống phân cấp

Để thêm màn hình tùy chọn mới vào hệ thống phân cấp, hãy xem Thêm cài đặt ô tô .

Sau khi tạo màn hình tùy chọn mới, hãy sử dụng các ví dụ ở trên để sắp xếp lại thứ bậc tùy chọn theo ý muốn.