تنظیمات خودرو ( packages/apps/Car/Settings
) به طور خاص برای سیستم عامل Android Automotive (AAOS) ارائه شده است. تنظیمات خودرو با تنظیمات تلفن ( packages/apps/Settings
) متفاوت است. در حالی که «تنظیمات خودرو» حاوی برخی تنظیمات آشنای تلفن است، «تنظیمات خودرو» یک رابط کاربری بصری با خودرو ، بهینهسازیهای حواسپرتی راننده و نقاط ورودی سفارشیسازی متعددی برای OEMها ارائه میکند.
علاوه بر نمای کلی تنظیمات خودرو که در زیر ارائه شده است، برای کسب اطلاعات بیشتر در مورد تنظیمات خودرو، به این موضوعات مرتبط مراجعه کنید:
- افزودن تنظیمات خودرو
- تنظیم مجدد تنظیمات خودرو
- بهینه سازی حواس پرتی در تنظیمات خودرو
- نمایه سازی جستجوی تنظیمات خودرو
- سفارشی سازی دو صفحه
معماری و دستورالعمل ها
بیشتر صفحات در تنظیمات خودرو به صورت مجموعهای از قطعات پیادهسازی میشوند که SettingsFragment را گسترش میدهند و هر کدام فعالیت خاص خود را در CarSettingActivities تعریف میکنند. این فعالیت های ایستا از BaseCarSettingsActivity گسترش یافته است. در حالی که چند استثنا برای این قاعده وجود دارد، مانند برخی از قطعات خاص که BaseFragment را به جای SettingsFragment
گسترش می دهند و برخی از فعالیت ها خارج از CarSettingActivities قرار دارند، که همه آنها باید به عنوان استثنا در نظر گرفته شوند (نه به عنوان الگوهایی که باید دنبال شوند).
ترجیحات استاتیک
یک اولویت ثابت در XML با استفاده از تگ Preference یا CarUiPreference تعریف می شود. اجرای SettingsFragment
از متد getPreferenceScreenResId()
استفاده می کند تا مشخص کند کدام فایل XML حاوی لیست ایستا ترجیحات برای نمایش است.
ترجیحات پویا
ترجیحات پویا از تگ PreferenceGroup یا پیاده سازی PreferenceGroup استفاده می کنند.
در برنامه CarSettings، تنظیمات برگزیده پویا مجموعهای عادی از اولویتها را نشان میدهد که کاربر را به صفحات اضافی در CarSettings هدایت میکند، اما از طریق کنترلکننده ترجیحی به جای XML اضافه شدهاند. به عنوان مثال، تنظیمات برگزیده Manage keyboards در زیر تنظیمات زبان و ورودی است که به صورت پویا روشهای ورودی را بر اساس مجاز بودن یا نبودن این روشهای ورودی به صفحه ترجیحی اضافه میکند.
نوارهای اکشن
بالای هر صفحه تنظیمات دارای یک نوار عمل است که میتواند شامل یک پیمایش «بازگشت»، عنوان صفحه و ابزارکهای اقدام تکمیلی (به عنوان مثال، دکمهها و سوئیچها) باشد. این نوارهای اکشن مشابه ActionBar ارائه شده توسط اندروید هستند، اما در واقع نماهای سفارشی هستند. در اندروید 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); } }
نوارهای عمل با پشتیبانی از بهینه سازی حواس پرتی در تنظیمات خودرو ارائه می شوند. UXRestrictions را در MenuItem.Builder
در هنگام ایجاد تنظیم کنید.
کنترل کننده های ترجیحی
هر صفحه تنظیمات می تواند تعدادی تنظیمات برگزیده مختلف را در خود جای دهد.
برای چگونگی ارتباط این اجزاء به تصویر زیر نگاه کنید:
شکل 1. اجزای تنظیمات خودرو
PreferenceController
یک جزء آگاه از چرخه حیات است که به کپسوله کردن منطق تجاری مربوط به Preferences خاص کمک می کند. PreferenceControllers
فقط می توان از طریق XML به Preference مربوطه متصل کرد.
// 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
از طریق کد جلوگیری می کند تا اصلاح سلسله مراتب تنظیمات را با حداقل تغییرات در کد جاوا آسان تر کند.
این امکان وجود دارد که یک 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(...)
استفاده شود، حفظ هدف اصلی یعنی امکان تنظیم مجدد سلسله مراتب تنظیمات با حداقل تغییرات در کد جاوا سخت تر می شود، زیرا بخش های بزرگی از کد قطعه موجود باید انجام شود. در قطعه جدید ایجاد شده کپی شد. یک راه برای به حداقل رساندن دشواری انجام این کار این است که:
- استفاده از
use(...)
. - سعی کنید هر فراخوانی برای
use(...)
در یک مکان در قطعه نگه دارید (مثلاً در متدonAttach()
).
رسیدگی به قصد
تمام مقاصدی که باید توسط برنامه تنظیمات خودرو مدیریت شود در فایل مانیفست تعریف شده است. Intent ها به طور کلی مانند اکثر برنامه های استاندارد اندروید تعریف و مدیریت می شوند و تمام فعالیت ها و فیلترهای هدف در مانیفست تعریف شده اند.
قطعه ریشه را تغییر دهید
در صورت تمایل، نماد خروج را می توان با استفاده از config_show_settings_root_exit_icon
نمایش داده یا پنهان کرد.
تم را سفارشی کنید
سایر ویژگی ها و منابع را سفارشی کنید
برنامه تنظیمات خودرو در درجه اول از CarSettingTheme
استفاده می کند که یک برنامه افزودنی Theme.CarUi
است. این موضوع برای استاندارد کردن ظاهر و احساس برنامه های سیستم برای اطمینان از ثبات در سیستم استفاده می شود.
تنظیمات برگزیده را سفارشی کنید
سفارشی کردن تنظیمات برگزیده شامل این مکانهای اضافی میشود:
- طرحبندی برخی از کلاسهای ترجیحی پایه در
car_preference
تعریف شده و برای ساخت خودرو روی آن قرار گرفته است . هر طرحبندی سفارشیسازی برای کلاسهای ترجیحی پایه را میتوان در اینجا جایگزین کرد. - تنظیمات خودرو از برخی اولویتهای سفارشی استفاده میکند که عمدتاً در بسته
common
تعریف شدهاند. اینها باید در ماژول تنظیمات خودرو به طور جداگانه از کلاس های ترجیحی پایه همپوشانی شوند.