يتم توفير إعدادات السيارة ( packages/apps/Car/Settings
) خصيصًا لنظام التشغيل Android Automotive (AAOS). تختلف إعدادات السيارة عن إعدادات الهاتف ( packages/apps/Settings
). بينما تحتوي إعدادات السيارة على بعض إعدادات الهاتف المألوفة، توفر إعدادات السيارة واجهة مستخدم مرئية خاصة بالسيارة ، وتحسينات لتشتيت انتباه السائق، والعديد من نقاط دخول التخصيص لمصنعي المعدات الأصلية.
بالإضافة إلى النظرة العامة على إعدادات السيارة الواردة أدناه، راجع هذه المواضيع ذات الصلة لمعرفة المزيد حول إعدادات السيارة:
- إضافة إعدادات السيارة
- إعادة ترتيب إعدادات السيارة
- تحسين التشتيت في إعدادات السيارة
- فهرسة بحث إعدادات السيارة
- تخصيص الجزء المزدوج
العمارة والمبادئ التوجيهية
يتم تنفيذ معظم الصفحات الموجودة في "إعدادات السيارة" كسلسلة من الأجزاء التي تعمل على توسيع "SettingsFragment" ، ولكل منها نشاطها الخاص المحدد في CarSettingActivities . يتم توسيع هذه الأنشطة الثابتة من BaseCarSettingsActivity . على الرغم من وجود بعض الاستثناءات لهذه القاعدة، مثل بعض الأجزاء الخاصة التي تعمل على توسيع BaseFragment بدلاً من SettingsFragment
وبعض الأنشطة الموجودة خارج CarSettingActivities ، فيجب اعتبارها جميعًا استثناءات (وليست أنماطًا يجب اتباعها).
التفضيلات الثابتة
يتم تعريف التفضيل الثابت في XML باستخدام علامة Preference أو CarUiPreference . يستخدم تطبيق SettingsFragment
طريقة getPreferenceScreenResId()
لتحديد ملف XML الذي يحتوي على قائمة ثابتة من التفضيلات المراد عرضها.
التفضيلات الديناميكية
تستخدم التفضيلات الديناميكية علامة PreferenceGroup أو تطبيق PreferenceGroup.
ضمن تطبيق CarSettings، تمثل التفضيلات الديناميكية مجموعة عادية من التفضيلات التي توجه المستخدم إلى صفحات إضافية داخل CarSettings، ولكن تمت إضافتها عبر وحدة التحكم في التفضيلات بدلاً من XML. ومن الأمثلة على ذلك تفضيلات إدارة لوحات المفاتيح ضمن تفضيلات اللغات والإدخال التي تضيف أساليب الإدخال إلى صفحة التفضيلات ديناميكيًا بناءً على ما إذا كانت أساليب الإدخال هذه مسموحة أم لا.
أشرطة العمل
يحتوي الجزء العلوي من كل شاشة إعدادات على شريط إجراءات، والذي يمكن أن يحتوي على التنقل "الخلفي"، وعنوان الشاشة، وعناصر واجهة المستخدم الإضافية (على سبيل المثال، الأزرار والمفاتيح). تشبه أشرطة الإجراءات هذه شريط الإجراءات الذي يوفره Android، ولكنها في الواقع طرق عرض مخصصة. في نظام التشغيل Android 11 والإصدارات الأحدث، يتم تضمين شريط الأدوات هذا في التخطيط الأساسي للهيكل، والذي يحتوي على طرق عرض شريط الأدوات وتخطيط الإطار لبقية محتوى التطبيق.
أدوات الإجراء التكميلية هي فئات MenuItem ويجب إنشاؤها في onCreate
الخاص بـ SettingsFragment
أو BaseFragment
المعني. يجب التحكم في الخصائص مثل الرؤية والحالة وما إلى ذلك بواسطة أدوات الضبط في منطق الأعمال الخاص بـ SettingsFragment
.
// ExampleSettingsFragment.java public class ExampleSettingsFragment extends SettingsFragment { @Override protected List<MenuItem> getToolbarMenuItems() { return Collections.singletonList(mClearConfirmButton); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mButton = new MenuItem.Builder(getContext()) .setTitle(R.string.text) .setOnClickListener(mOnClickListener) .setUxRestrictions(CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP) .build(); } private void updateState() { button.setVisible(false); } }
تأتي أشرطة الإجراءات مع دعم لتحسين التشتيت في إعدادات السيارة . قم بتعيين قيود UX في MenuItem.Builder
عند الإنشاء.
وحدات تحكم التفضيل
يمكن أن تحتوي كل صفحة إعدادات على عدد من التفضيلات المختلفة.
انظر الصورة التالية لمعرفة كيفية ارتباط هذه المكونات:
الشكل 1. مكونات إعدادات السيارة
يعد PreferenceController
مكونًا مدركًا لدورة الحياة ويساعد في تغليف منطق الأعمال المتعلق بتفضيلات محددة. لا يمكن إرفاق PreferenceControllers
إلا بالتفضيلات ذات الصلة من خلال XML.
// example_settings_fragment.xml <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res-auto" android:title="@string/example_settings_title"> <Preference android:key="@string/pk_example_preference_key" android:title="@string/example_preference_title" settings:controller="com.android.car.settings.example.ExamplePreferenceController"/> </PreferenceScreen>
تمنع إعدادات السيارة بشكل صريح إنشاء PreferenceController
من خلال التعليمات البرمجية لتسهيل تعديل التسلسل الهرمي للإعدادات مع الحد الأدنى من التغييرات في كود Java.
من الممكن أن يحتاج PreferenceController
إلى بعض البيانات الديناميكية ليعمل بشكل صحيح. على سبيل المثال، تحتاج PreferenceController
التي تقوم بإيقاف تشغيل الإشعارات لأحد التطبيقات إلى معرفة التطبيق الذي سيتم التصرف عليه. نظرًا لأن PreferenceControllers
يتم تعريفها دائمًا في XML، فلا توجد طريقة لتوفير وسيطات منشئة إضافية. بدلاً من ذلك، يتم توفير هذه القيم الإضافية من خلال أدوات ضبط عامة على PreferenceController
وتعيينها باستخدام طريقة use(...)
من SettingsFragment
.
// ExamplePreferenceController.java public class ExamplePreferenceContorller extends PreferenceController<Preference> { private ExampleArg mExampleArg; public ExamplePreferenceController(...) { ... } public void setExampleArg(ExampleArg exampleArg) { mExampleArg = exampleArg; } } // ExampleSettingsFragment.java public class ExampleSettingsFragment extends SettingsFragment { @Override @XmlRes protected int getPreferenceScreenResId() { Return R.xml.example_settings_fragment; } @Override public void onAttach(Context context) { ExampleArg arg = (ExampleArg) getArguments().getSerializeable(ARG_KEY); ExamplePreferenceController controller = use(ExamplePreferenceController.class, R.string.pk_example_preference_key); controller.setExampleArg(arg); } }
كلما تم استخدام طريقة use(...)
في كثير من الأحيان، أصبح من الصعب الحفاظ على الهدف الأصلي المتمثل في القدرة على إعادة ترتيب التسلسل الهرمي للإعدادات مع الحد الأدنى من التغييرات في كود Java، لأن الأقسام الكبيرة من كود الجزء الموجود تحتاج إلى تعديل نسخ إلى الجزء الذي تم إنشاؤه حديثا. إحدى الطرق لتقليل صعوبة القيام بذلك هي:
- قلل من استخدامك
use(...)
. - حاول الاحتفاظ بكل استدعاء
use(...)
في مكان واحد في الجزء (على سبيل المثال، في طريقةonAttach()
).
التعامل مع النية
يتم تحديد جميع الأغراض التي يجب أن يتعامل معها تطبيق إعدادات السيارة في ملف البيان . يتم تعريف النوايا بشكل عام والتعامل معها مثل معظم تطبيقات Android القياسية، مع تحديد جميع الأنشطة ومرشحات النوايا في البيان.
تغيير جزء الجذر
إذا رغبت في ذلك، يمكن عرض أو إخفاء أيقونة الخروج باستخدام config_show_settings_root_exit_icon
.
تخصيص الموضوع
تخصيص السمات والموارد الأخرى
يستخدم تطبيق إعدادات السيارة بشكل أساسي CarSettingTheme
، وهو امتداد لـ Theme.CarUi
. يتم استخدام هذا الموضوع لتوحيد الشكل والمظهر لتطبيقات النظام لضمان الاتساق في النظام.
تخصيص التفضيلات
يمتد تخصيص التفضيلات إلى هذه المواقع الإضافية:
- يتم تعريف تخطيط بعض فئات التفضيلات الأساسية في
car_preference
ويتم تضمينه في تصميمات السيارة. يمكن استبدال أي تخطيطات تخصيص لفئات التفضيلات الأساسية هنا. - تستخدم إعدادات السيارة بعض التفضيلات المخصصة المحددة بشكل أساسي في الحزمة
common
. يجب أن يتم تراكبها داخل وحدة إعدادات السيارة بشكل منفصل عن فئات التفضيلات الأساسية.