大部分情況下,重新調整「設定」階層
通常包括移動相關偏好
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>
移動使用(...) 的偏好設定
請參考以下較複雜的範例,捨棄所有偏好設定
「資料警告」和將片段限制在一個層級內,使其成為「資料用量」片段
更新 DataWarningAndLimitFragment.java
,加入 use
方法
,在建構完成後將資訊傳遞到偏好設定控制器。
- 將相關的 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>
- 在
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
方法,並在存在時傳入範本 (否則傳入空值),然後 更新DataUsageFragment
的活動或取得意圖 直接呼叫onAttach
方法中的資訊getActivity().getIntent()
。不論是哪一種情況,您都可以傳入 - 先找出舊片段中的任何其他依附元件或預期意圖動作, 清理舊片段和 XML 檔案在本例中 疊加層 config value 會指向舊活動,因此必須更新成指向舊活動 正確的活動
在階層中加入偏好設定畫面
如要在階層中新增偏好設定畫面,請參閱「新增車輛設定」。
建立新的偏好設定畫面後,請使用上述範例重新排列 套用偏好設定階層