Đố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.
- 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>
- Trong
DataWarningAndLimitFragment.java
, hãy xác định cách sử dụng phương thứcuse
.@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ứconAttach
đề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 choDataUsageFragment
hoặc lấy thông tin ý định trực tiếp trong 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 thông tin cần thiết cho phương pháp này như bạn đã làm ở trên. - 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.