Trong hầu hết trường hợp, 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 lựa chọn ưu tiên có liên quan và
PreferenceController
sang một tệp XML khác. Nếu
PreferenceController
sử dụng use(...)
, hãy nhớ loại bỏ
từ SettingsFragment
trước và thêm vào
SettingsFragment
.
Trang này cung cấp các ví dụ về cách sắp xếp lại phần Cài đặt để xem xét các trường hợp có thể xảy ra.
Di chuyển lựa chọn ưu tiên cơ bản
Ví dụ này giải thích cách di chuyển một lựa chọn ưu tiên từ màn hình lựa chọn này sang màn hình lựa chọn ưu tiên khác,
trong đó lựa chọn ưu tiên chỉ có trình điều khiển lựa chọn ưu tiê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ủ vào Tùy chọn hệ thống
màn hình. Để thực hiện việc này, hãy di chuyển XML sau từ homepage_fragment.xml
vào phần tử
vị trí thích hợp ở 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 một lựa chọn ưu tiên sử dụng hàm use(...)
Hãy xem xét ví dụ phức tạp hơn sau đây để di chuyển tất cả lựa chọn ưu tiên
trong mục Cảnh báo dữ liệu và Giới hạn mảnh lên một cấp trong mảnh Sử dụng dữ liệu.
cập nhật DataWarningAndLimitFragment.java
để bao gồm phương thức use
để truyền thông tin vào bộ điều khiển lựa chọn ưu tiên sau khi tạo.
- Di chuyển XML 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>
- Trong
DataWarningAndLimitFragment.java
, hãy xác định cáchuse
được sử dụng.@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 chỉnh sửa chính sách mạng và mẫu mạng cho các bộ điều khiển lựa chọn ưu tiên. Vì ví dụ này di chuyển tất cả các lựa chọn ưu tiên và tất cả mã trong phương thứconAttach
có liên quan đến việc đặt các thông số tuỳ chọn này thì sẽ phù hợp để sao chép toàn bộ nội dung phương thức vào mảnh mới. Tuy nhiên, điều này sẽ thay đổi tuỳ thuộc vào tùy chọn cụ thể. Bạn cũng cần di chuyển các biến thực thể có liên quan.Tuy nhiên, có một chức năng. Mảnh ban đầu dự kiến
NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE
sẽ trở thành được truyền vào dưới dạng đối số, sẽ xuất phát từ ý định đến hoạt động (khi được cung cấp).Để lấy thông tin cần thiết này, hãy tạo một
newInstance
và truyền vào mẫu khi có (nếu không sẽ truyền giá trị rỗng) rồi sau đó cập nhật hoạt động choDataUsageFragment
hoặc lấy ý định trực tiếp vào phương thứconAttach
bằng cách sử dụnggetActivity().getIntent()
. Trong cả hai trường hợp, bạn có thể chuyển cho phương pháp này như đã làm ở trên. - Xác định mọi phần phụ thuộc hoặc thao tác theo ý định dự kiến trong mảnh cũ trước đó dọn dẹp các mảnh và tệp XML cũ. Trong trường hợp này, lớp phủ config 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 lựa chọn ưu tiên vào hệ phân cấp
Để thêm màn hình lựa chọn ưu tiên mới vào hệ phân cấp, hãy xem phần Thêm chế độ cài đặt cho ô tô.
Sau khi tạo màn hình lựa chọn ưu tiên mới, hãy sử dụng các ví dụ ở trên để sắp xếp lại như mong muốn.