يتم تنفيذ معظم الصفحات في "إعدادات السيارة" كسلسلة من
الأجزاء التي تزيد SettingsFragment
،
مع تحديد نشاط كل منهم في "CarSettingActivities
".
تم تمديد هذه الأنشطة الثابتة من BaseCarSettingsActivity
.
بالإضافة إلى هذه الإعدادات، يمكنك إدخال التفضيلات من تطبيقات النظام الأخرى
في إعدادات السيارة.
إضافة تفضيل جديد في إعدادات السيارة
لإضافة إعداد جديد:
- تحديد ملف XML:
- تأكَّد من تحديد جميع الإعدادات المفضّلة للسمة
android:key
. القائمة من المفاتيح يتم الاحتفاظ بها فيpreference_keys.xml
. الإعدادات المفضّلة أن تكون فريدة من نوعها. - ولأغراض فهرسة البحث، يجب أن تتضمن شاشات الإعدادات المفضّلة أيضًا
قيمة
android:key
محدّدة. قائمة بمفاتيح الشاشة المفضلة فيpreference_screen_keys.xml
. التفضيل ومفاتيح الشاشة فريدة من نوعها. - إذا كان التفضيل يعرض معلومات ثابتة فقط (على سبيل المثال،
بدون منطق عمل خاص)، اضبط وحدة التحكم في التفضيلات على
com.android.car.settings.common.DefaultRestrictionsPreferenceController
- إذا كان التفضيل يتطلب منطقًا للنشاط التجاري، اضبط الإعدادات المفضّلة باسم جديد لوحدة التحكم المفضلة.
- تأكَّد من تحديد جميع الإعدادات المفضّلة للسمة
- (إذا لزم الأمر) أنشئ وحدة التحكم في الإعدادات المفضّلة بالتنسيق المناسب
التي تمتدّ لـ
PreferenceController
. راجع Javadoc إذا لزم الأمر. - إنشاء جزء مع عرض
getPreferenceScreenResId
تم تحديد ملف XML في الخطوة 1. - إنشاء نشاط في "
CarSettingActivities
" يمتدBaseCarSettingsActivity
ثم تنفيذgetInitialFragment()
، مع عرض الجزء المحدد في الخطوة 3. - عدِّل
AndroidManifest.xml
لتضمين النشاط المحدّد في الخطوة 4.
مثال
توضح المادة التالية هذه العملية.
- تحديد ملف XML باسم
demo_fragment.xml
:<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res-auto" android:title="@string/demo_label" android:key="@string/psk_demo"> <Preference android:icon="@drawable/ic_settings_demo_preference_1" android:key="@string/pk_demo_preference_1" android:title="@string/demo_preference_1_title" settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController"> <intent android:targetPackage="com.android.car.settings" android:targetClass="com.android.car.settings.common.CarSettingActivities$DemoSetting1Activity"/> </Preference> <Preference android:icon="@drawable/ic_settings_demo_preference_2" android:key="@string/pk_demo_preference_2" android:title="@string/demo_preference_2_title" settings:controller="com.android.car.settings.example.MyCustomRestrictionsPreferenceController"> <intent android:targetPackage="com.android.car.settings" android:targetClass="com.android.car.settings.common.CarSettingActivities$DemoSetting2Activity"/> </Preference> </PreferenceScreen>
- إضافة مفاتيح التفضيلات إلى
preference_keys
:<resources> [...] <string name="pk_demo_preference_1" translatable="false">demo_preference_1</string> <string name="pk_demo_preference_2" translatable="false">demo_preference_2</string> </resources>
- إضافة مفتاح الشاشة المفضّل إلى
preference_screen_keys.xml
:<resources> [...] <string name="psk_demo" translatable="false">demo_screen</string> </resources>
بالنسبة إلى المثال الأول الذي تفضّله، استخدِم
DefaultRestrictionsPreferenceController
. بالنسبة إلى التفضيل الثاني، استخدم وحدة تحكم تفضيلات مخصصة، والتي يجب تحديدها. في هذا المثال، يمكنك تخصيص هذا الخيار المفضّل للمستخدمين المشرفين المتاحين فقط. ولإجراء ذلك، عليك تحديد وحدة التحكّم المخصّصة التالية:public class MyCustomRestrictionsPreferenceController extends PreferenceController<Preference> { private final UserManager mUserManager; public MyCustomRestrictionsPreferenceController(Context context, String preferenceKey, FragmentController fragmentController, CarUxRestrictions uxRestrictions) { super(context, preferenceKey, fragmentController, uxRestrictions); mUserManager = UserManager.get(context); } @Override protected Class<Preference> getPreferenceType() { return Preference.class; } @Override public int getAvailabilityStatus() { return mUserManager.isAdminUser() ? AVAILABLE : DISABLED_FOR_USER; } }
- لإنشاء جزء، يمكنك إلغاء
getPreferenceScreenResId
: - للاحتفاظ بالجزء الجديد، يجب إنشاء نشاط في
CarSettingActivities
: - تعديل ملف البيان باستخدام النشاط الجديد:
- لا يتم تنفيذه مباشرةً في تطبيق CarSettings (مثل إدخال إعداد ينفذه المصنّعون الأصليون للأجهزة).
- يجب أن تظهر في تطبيق CarSettings.
- لوضع علامة على النشاط كإعداد تم إدخاله، أضِف فلتر أهداف إلى النشاط.
- أخبر تطبيق CarSettings بالفئة التي ينتمي إليها. الفئة هي
ثابت، محدد في
CategoryKey
، وتُستخدم للإشارة إلى مستوى إعدادات CarSettings التي تم إدخالها البيانات التي يجب أن تظهر فيها. نحن نقدم مجموعة من الفئات داخلCategoryKey
، ولكن ليست هناك قيود على المصنِّعين الأصليين للأجهزة تعريفها فئاتهم الخاصة. - (اختياري) أضِف نص ملخّص عند عرض الإعداد:
<activity android:name="Settings$DemoSettingsActivity" <!-- Mark the activity as an injected setting --> <intent-filter> <action android:name="com.android.settings.action.EXTRA_SETTINGS"/> </intent-filter> <!-- Tell CarSettings app which category it belongs to --> <meta-data android:name="com.android.settings.category" android:value="com.android.settings.category.demo_category"/> <!-- Tell CarSettings the what the preference title should be --> <meta-data android:name="com.android.settings.title" android:value="@string/app_name" /> <!-- Optional: specify the icon to show with the preference --> <meta-data android:name="com.android.settings.icon" android:resource="@drawable/ic_demo" android:value="true"/> <!-- Optional: Add a summary text when the string is displayed --> <meta-data android:name="com.android.settings.summary" android:resource="@string/demo_summary"/> </activity>
public class DemoFragment extends SettingsFragment { @Override @XmlRes protected int getPreferenceScreenResId() { return R.xml.demo_fragment; } }
public class CarSettingActivities { [...] public static class DemoActivity extends BaseCarSettingsActivity { @Nullable @Override protected Fragment getInitialFragment() { return new DemoFragment(); } } }
<application [...] <activity android:name=".common.CarSettingActivities$DemoActivity" android:exported="true"> <meta-data android:name="distractionOptimized" android:value="true"/> </activity> [...] </application>
إضافة تفضيل خارجي حسب النية بالشراء في "إعدادات السيارة"
وكبديل للتفضيلات التي تم إدخالها، من الممكن أيضًا: إدراج تفضيل مباشرةً في إعدادات السيارة المقصودة إلى تطبيق آخر. ويمكن إجراء ذلك عن طريق إضافة تفضيل إلى شاشة الإعدادات المفضّلة مع إجراء intent الذي يتم نقله إلى التطبيق. مثل التفضيلات الأخرى في إعدادات السيارة، فإن هذه التفضيلات تضم نفس سمات XML المتاحة لها.
<Preference android:key="@string/pk_demo_preference" android:title="@string/demo_preference_title" android:summary="@string/demo_preference_summary" settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController"> <intent android:action="android.intent.action.DEMO_ACTION"/> </Preference>
إضافة إعدادات مفضّلة تم إدخالها
تحتوي الإعدادات المفضّلة التي تم إدخالها على أغراض تؤدي إلى خارجية أو داخلية. والأنشطة السابقة. على سبيل المثال، عنصر الإعداد Google في "الإعدادات" الصفحة الرئيسية هي تفضيل تم إدخاله. تكون التفضيلات التي تم إدخالها مفيدًا عندما ينطبق أي مما يلي. الإعداد:
لضبط نشاط كإعداد تم إدخاله:
ولإظهار الإعداد الذي تم إدخاله في صفحة محددة في تطبيق CarSettings، بتضمين الرمز النموذجي التالي في XML، مع تعديل المتغيرات عندما يكون ذلك مناسبًا:
<com.android.car.settings.common.LogicalPreferenceGroup <!-- Replace key string --> android:key="@string/pk_system_extra_settings" <!-- Indicates the preferences in the group should be injected in. ExtraSettingsPreferenceController contains the logic to pull in injected preferences. --> settings:controller="com.android.settings.common.ExtraSettingsPreferenceController"> <!-- Tells the controller what activities should be pulled into this preference group. --> <intent android:action="com.android.settings.action.EXTRA_SETTINGS"> <!-- Name and value should match the metadata in your activity --> <extra android:name="com.android.settings.category" android:value="com.android.settings.category.demo_category"/> </intent> </com.android.car.settings.common.LogicalPreferenceGroup>