بااستفاده از Navigation SDK for Android، میتوانید با تعیین اینکه کدامیک از عناصر و کنترلهای میانای کاربر داخلی در نقشه نشان داده شود، تجربه کاربری را با نقشهتان اصلاح کنید. همچنین میتوانید ظاهر بصری میانای کاربر پیمایش را تنظیم کنید. برای رهنمودهای مربوط به اصلاحات قابلقبول در واسط کاربر ناوبری، به صفحه خطمشیها مراجعه کنید.
این سند نحوه اصلاح میانای کاربر نقشه را به دو روش شرح میدهد:
کنترلهای میانای کاربر نقشه
برای قرار دادن عناصر میانای کاربر سفارشی در نمای پیمایش، از کنترلهای میانای کاربر نقشه برای
موقعیتیابی مناسب استفاده کنید. وقتی چیدمان داخلی تغییر میکند،
Navigation SDK for Android بهطور خودکار کنترلهای سفارشی شما را جابهجا میکند.
هر بار میتوانید یک نمای کنترل سفارشی برای هر موقعیت تنظیم کنید. اگر طراحی شما
به چندین عنصر میانای کاربر نیاز دارد، میتوانید آنها را در ViewGroup قرار دهید و آن را
به روش setCustomControl منتقل کنید.
روش setCustomControl موقعیتها را همانطور که در CustomControlPositionenum تعریف شده است ارائه میدهد:
SECONDARY_HEADER(فقط در حالت عمودی نشان داده میشود)BOTTOM_START_BELOWBOTTOM_END_BELOWFOOTER
افزودن کنترل سفارشی
- با عنصر میانای کاربر سفارشی یا ViewGroup، یک نمای Android ایجاد کنید.
- XML را گسترش دهید یا نمای سفارشی را نمونهسازی کنید تا نمونهای از نما را دریافت کنید.
از
NavigationView.setCustomControlیاNavigationFragment.setCustomControlبا موقعیت کنترل سفارشی انتخابشده ازCustomControlPositionenum استفاده کنید.مثال زیر قطعهای ایجاد میکند و کنترل سفارشی را در جایگاه سرایند ثانویه اضافه میکند.
mNavFragment.setCustomControl(getLayoutInflater(). inflate(R.layout.your_custom_control, null), CustomControlPosition.SECONDARY_HEADER); ```
برداشتن کنترل سفارشی
برای برداشتن کنترل سفارشی، روش setCustomControl را با پارامتر نمای null و موقعیت کنترل سفارشی انتخابشده فراخوانی کنید.
برای مثال، قطعه کد زیر هرگونه سرصفحه ثانویه سفارشی را برمیدارد و به محتوای پیشفرض برمیگردد:
mNavFragment.setCustomControl(null, CustomControlPosition.SECONDARY_HEADER);
موقعیتهای کنترل سفارشی
سرصفحه فرعی
برای استفاده از این موقعیت کنترل سفارشی، موقعیت
CustomControlPosition.SECONDARY_HEADER را به setCustomControl ارسال کنید.
بهطور پیشفرض، چیدمانهای صفحه در حالت پیمایش، موقعیتی را برای سرصفحه ثانویه که در زیر سرصفحه اصلی قرار دارد فراهم میکنند. این سرصفحه ثانویه درصورت لزوم، مثلاً هنگام راهنمایی لاین، نشان داده میشود. برنامه شما میتواند از این موقعیت سرصفحه ثانویه در چیدمان برای محتوای سفارشی استفاده کند. وقتی از این ویژگی استفاده میکنید، کنترل شما هرگونه محتوای سرصفحه ثانویه پیشفرض را پوشش میدهد. اگر نمای پیمایش شما پسزمینه داشته باشد، آن پسزمینه در جای خود باقی میماند و با سرصفحه ثانویه پوشانده میشود. وقتی برنامهتان کنترل سفارشی را برمیدارد، هر سرصفحه ثانویه پیشفرضی میتواند بهجای آن نشان داده شود.
موقعیت سرصفحه فرعی سفارشی، لبه بالایی آن را با لبه پایینی سرصفحه اصلی تراز میکند. این جایگاه فقط در portrait mode پشتیبانی میشود. در
landscape mode، سرصفحه ثانویه دردسترس نیست و چیدمان
تغییر نمیکند.
شروع پایین
برای استفاده از این موقعیت کنترل سفارشی، موقعیت
CustomControlPosition.BOTTOM_START_BELOW را به setCustomControl ارسال کنید.
این موقعیت کنترل سفارشی در گوشه پایین سمت راست نقشه قرار دارد. در هر دو
portrait mode و landscape mode، بالای کارت زمان تخمینی ورود و/یا پانویس سفارشی
قرار میگیرد (یا اگر هیچکدام وجود نداشته باشند، در امتداد پایین نقشه قرار میگیرد)، و عناصر Nav SDK
ازجمله دکمه بازمرکز کردن و نشانواره Google برای درنظر گرفتن
ارتفاع نمای کنترل سفارشی به بالا منتقل میشوند. این کنترل در داخل مرزهای نقشه قابلمشاهده قرار دارد، بنابراین هرگونه حاشیهای که به لبههای پایین یا شروع نقشه اضافه شود، موقعیت این کنترل را نیز تغییر خواهد داد.
پایین
برای استفاده از این موقعیت کنترل سفارشی، موقعیت
CustomControlPosition.BOTTOM_END_BELOW را به setCustomControl ارسال کنید.
این موقعیت کنترل سفارشی در گوشه پایین نقشه قرار دارد. در
portrait mode، بالای کارت زمان تخمینی ورود و/یا پانویس سفارشی (یا در امتداد
پایین نقشه اگر هیچکدام وجود نداشته باشند) قرار دارد، اما در landscape mode با
پایین نقشه تراز شده است. هر عنصر Nav SDK که در سمت انتهایی (سمت راست در LTR) قابلمشاهده باشد، بهاندازه ارتفاع نمای کنترل سفارشی بالا میرود. این کنترل در داخل مرزهای نقشه قابلمشاهده قرار دارد، بنابراین هرگونه حاشیهای که به لبههای پایین یا انتهای نقشه اضافه شود، موقعیت این کنترل را نیز تغییر خواهد داد.
پانویس
برای استفاده از این موقعیت کنترل سفارشی، موقعیت
CustomControlPosition.FOOTER را به setCustomControl ارسال کنید.
این موقعیت کنترل سفارشی برای نمای پانویس سفارشی طراحی شده است. اگر کارت زمان تخمینی ورود Nav
SDK نمایان باشد، این کنترل بالای آن قرار میگیرد. اگر نه، کنترل با پایین نقشه تراز میشود. برخلاف کنترلهای سفارشی BOTTOM_START_BELOW و
BOTTOM_END_BELOW، این کنترل خارج از
مرزهای نقشه قابلمشاهده قرار دارد، یعنی هرگونه حاشیهای که به نقشه اضافه شود
موقعیت این کنترل را تغییر نخواهد داد.
در portrait mode، پانویس سفارشی تمامعرض است. کنترلهای سفارشی در هر دو موقعیت
CustomControlPosition.BOTTOM_START_BELOW و
CustomControlPosition.BOTTOM_END_BELOW، و همچنین عناصر میانای کاربر Nav SDK مانند دکمه بازمرکز کردن و نشانواره Google، در بالای پانویس کنترل سفارشی قرار دارند. موقعیت پیشفرض نشانگر chevron ارتفاع سفارشی پانویس را درنظر میگیرد.
در landscape mode، پانویس سفارشی نصف عرض است و با طرف شروع (سمت چپ در زبانهای چپبهراست) تراز شده است، درست مانند کارت زمان تخمینی رسیدن در کیت توسعه نرمافزار Nav. کنترلهای سفارشی در
موقعیت CustomControlPosition.BOTTOM_START_BELOW و عناصر میانای کاربر Nav SDK
مانند دکمه بازمرکز کردن و نشانواره Google در بالای پانویس کنترل سفارشی قرار دارند. کنترلهای سفارشی در موقعیت CustomControlPosition.BOTTOM_END_BELOW و هر عنصر میانای کاربر Nav SDK در امتداد طرف انتهایی (سمت راست در زبانهای چپ به راست) با پایین نقشه تراز میمانند. موقعیت پیشفرض نشانگر زاویهدار با وجود پانویس سفارشی تغییر نمیکند، زیرا پانویس تا انتهای نقشه گسترش نمییابد.
کنترلهای سفارشی در موقعیتهای CustomControlPosition.BOTTOM_START_BELOW و CustomControlPosition.BOTTOM_END_BELOW، و همچنین عناصر میانای کاربر Nav SDK مانند دکمه بازمرکز کردن و نشانواره Google در بالای پانویس کنترل سفارشی قرار دارند.
لوازم جانبی میانای کاربر نقشه
کیت توسعه نرمافزار پیمایش برای Android لوازم جانبی واسط کاربری را ارائه میدهد که درطول پیمایش ظاهر میشوند و شبیه به مواردی هستند که در برنامه Google Maps برای Android یافت میشوند. میتوانید رؤیتپذیری یا ظاهر بصری این کنترلها را همانطور که در این بخش شرح داده شده است تنظیم کنید. تغییراتی که در اینجا ایجاد میکنید در جلسه ناوبری بعدی اعمال میشود.
برای دستورالعملهای مربوط به اصلاحات قابلقبول در واسط کاربری پیمایش، به صفحه خطمشیها مراجعه کنید.
مشاهده کد
برجستهسازی مقصد و ورودیها
وقتی مقصدی با
placeID ایجاد میشود، ساختمان مقصد
برجسته میشود و درصورت امکان، نماد ورودی
نشان داده میشود. این نشانههای دیداری به کاربران کمک میکند مقصدشان را تشخیص دهند و به آن پیمایش کنند.
برای ایجاد مقصد با placeID، از روش
Waypoint.Builder.setPlaceIdString()
استفاده کنید.

اصلاح کردن سرایند پیمایش

از
NavigationFragment.setStylingOptions()
یا
NavigationView.setStylingOptions()
برای تغییر زمینه سرصفحه پیمایش و نشانگر پیچ بعدی که درصورت وجود در زیر سرصفحه نشان داده میشود استفاده کنید.
میتوانید مشخصههای زیر را تنظیم کنید:
| نوع مشخصه | مشخصهها |
|---|---|
| رنگ پسزمینه |
|
| عناصر نوشتاری برای دستورالعملها |
|
| عناصر نوشتاری برای مراحل بعدی |
|
| نمادهای مانور |
|
| راهنمای خطوط |
|
مثال زیر نحوه تنظیم گزینههای سبکبندی را نشان میدهد:
private NavigationFragment mNavFragment;
mNavFragment = (NavigationFragment) getSupportFragmentManager()
.findFragmentById(R.id.navigation_fragment);
// Set the styling options on the fragment.
mNavFragment.setStylingOptions(new StylingOptions()
.primaryDayModeThemeColor(0xff1A237E)
.secondaryDayModeThemeColor(0xff3F51B5)
.primaryNightModeThemeColor(0xff212121)
.secondaryNightModeThemeColor(0xff424242)
.headerLargeManeuverIconColor(0xffffff00)
.headerSmallManeuverIconColor(0xffffa500)
.headerNextStepTypefacePath("/system/fonts/NotoSerif-BoldItalic.ttf")
.headerNextStepTextColor(0xff00ff00)
.headerNextStepTextSize(20f)
.headerDistanceTypefacePath("/system/fonts/NotoSerif-Italic.ttf")
.headerDistanceValueTextColor(0xff00ff00)
.headerDistanceUnitsTextColor(0xff0000ff)
.headerDistanceValueTextSize(20f)
.headerDistanceUnitsTextSize(18f)
.headerInstructionsTypefacePath("/system/fonts/NotoSerif-BoldItalic.ttf")
.headerInstructionsTextColor(0xffffff00)
.headerInstructionsFirstRowTextSize(24f)
.headerInstructionsSecondRowTextSize(20f)
.headerGuidanceRecommendedLaneColor(0xffffa500));
خاموش کردن لایه ترافیک
از
GoogleMap.setTrafficEnabled()
برای فعال یا غیرفعال کردن لایه ترافیک در نقشه استفاده کنید. این تنظیم بر نشانگرهای تراکم ترافیک که در کل نقشه نشان داده میشود تأثیر میگذارد. اما بر نشانگرهای ترافیک در مسیر ترسیمشده توسط ناوبری تأثیری ندارد.
private GoogleMap mMap;
// Get the map, and when the async call returns, setTrafficEnabled
// (callback will be on the UI thread)
mMap = mNavFragment.getMapAsync(navMap -> navMap.setTrafficEnabled(false));
چراغهای راهنمایی و علائم ایست

درطول ناوبری فعال، نقشه چراغهای راهنمایی و علائم ایست را نشان میدهد تا بافت بیشتری درباره مسیر و مانورهای پیشرو به کاربران ارائه دهد. از نسخه ۸.۰.۰ به بعد، نمیتوانید این ویژگی را خاموش کنید.
افزودن نشانگرهای سفارشی
کیت توسعه نرمافزار پیمایش برای Android اکنون از میاناهای برنامهسازی کاربردی Google Maps برای نشانگرها استفاده میکند. برای اطلاعات بیشتر، به اسناد Maps API بروید.
نوشتار شناور
میتوانید نوشتار شناور را در هر جایی از برنامهتان اضافه کنید، بهشرطی که ارجاع Google را نپوشاند. کیت توسعه نرمافزار ناوبری از لنگر انداختن نوشتار به عرض/طول جغرافیایی روی نقشه یا به برچسب پشتیبانی نمیکند. برای اطلاعات بیشتر، به پنجرههای اطلاعات بروید.
نمایش حد سرعت
میتوانید نماد محدودیت سرعت را بهصورت برنامهنویسیشده نشان دهید یا پنهان کنید. از
NavigationView.setSpeedLimitIconEnabled()
یا
NavigationFragment.setSpeedLimitIconEnabled()
برای نمایش یا پنهان کردن نماد محدودیت سرعت استفاده کنید. وقتی فعال باشد، نماد محدودیت سرعت
در گوشه پایین درطول راهنمایی نمایش داده میشود. این نماد محدودیت سرعت جادهای را که خودرو در آن درحال حرکت است نشان میدهد. این نماد فقط در مکانهایی نشان داده میشود
که دادههای معتبر محدودیت سرعت دردسترس باشد.
// Display the Speed Limit icon
mNavFragment.setSpeedLimitIconEnabled(true);
وقتی دکمه «مرکز کردن مجدد» نمایش داده میشود، نماد سقف سرعت مجاز موقتاً پنهان میشود.
تنظیم حالت شب
میتوانید رفتار حالت شب را بهصورت برنامهنویسیشده کنترل کنید. از
NavigationView.setForceNightMode()
یا
NavigationFragment.setForceNightMode()
برای روشن یا خاموش کردن حالت شب استفاده کنید، یا اجازه دهید Navigation SDK for Android
آن را کنترل کند.
AUTOبه Navigation SDK اجازه میدهد حالت مناسب را براساس مکان دستگاه و زمان محلی تعیین کند.FORCE_NIGHTحالت شب را بهاجبار روشن میکند.-
FORCE_DAYحالت روز را اجباری میکند.
مثال زیر نشان میدهد که چگونه میتوان حالت شب را در یک قطعه پیمایش بهاجبار روشن کرد:
// Force night mode on.
mNavFragment.setForceNightMode(FORCE_NIGHT);
نمایش فهرست مسیرها
ابتدا، نما را ایجاد کنید و آن را به سلسلهمراتب خود اضافه کنید.
void setupDirectionsListView() {
// Create the view.
DirectionsListView directionsListView = new DirectionsListView(getApplicationContext());
// Add the view to your view hierarchy.
ViewGroup group = findViewById(R.id.directions_view);
group.addView(directionsListView);
// Add a button to your layout to close the directions list view.
ImageButton button = findViewById(R.id.close_directions_button); // this button is part of the container we hide in the next line.
button.setOnClickListener(
v -> findViewById(R.id.directions_view_container).setVisibility(View.GONE));
}
حتماً رویدادهای چرخه حیات را به DirectionsListView بازارسال کنید، درست همانطور که
با NavigationView انجام میشود. برای مثال:
protected void onResume() {
super.onResume();
directionsListView.onResume();
}
پنهان کردن مسیرهای جایگزین
وقتی میانای کاربر با اطلاعات بیشازحد شلوغ میشود، میتوانید با نمایش دادن مسیرهای جایگزین کمتر از مقدار پیشفرض (دو) یا با نمایش ندادن هیچ مسیر جایگزینی، شلوغی را کاهش دهید. میتوانید این گزینه را قبلاز واکشی مسیرها با فراخوانی روش RoutingOptions.alternateRoutesStrategy() با یکی از مقادیر فهرست زیر پیکربندی کنید:
| ارزش فهرست | شرح |
|---|---|
| AlternateRoutesStrategy.SHOW_ALL | پیشفرض. حداکثر دو مسیر جایگزین را نمایش میدهد. |
| AlternateRoutesStrategy.SHOW_ONE | یک مسیر جایگزین را نمایش میدهد (اگر وجود داشته باشد). |
| AlternateRoutesStrategy.SHOW_NONE | مسیرهای جایگزین را پنهان میکند. |
نمونه کد زیر نشان میدهد که چگونه میتوان مسیرهای جایگزین را بهطور کامل پنهان کرد.
RoutingOptions routingOptions = new RoutingOptions();
routingOptions.alternateRoutesStrategy(AlternateRoutesStrategy.SHOW_NONE);
navigator.setDestinations(destinations, routingOptions, displayOptions);
نوار پیشرفت سفر

نوار پیشرفت سفر نوار عمودیای است که هنگام شروع ناوبری در سمت شروع/پیشرو نقشه ظاهر میشود. وقتی فعال باشد، نمای کلی کل سفر را بههمراه مقصد و موقعیت فعلی کاربر نمایش میدهد.
این ویژگی به کاربران امکان میدهد مشکلات پیشرو، مانند ترافیک، را بدون نیاز به بزرگنمایی پیشبینی کنند. سپس درصورت لزوم میتوانند مسیر سفر را تغییر دهند. اگر کاربر مسیر سفر را تغییر دهد، نوار پیشرفت بازنشانی میشود، گویی سفر جدیدی از آن نقطه شروع شده است.
نوار پیشرفت سفر نشانگرهای وضعیت زیر را نمایش میدهد:
مسیر سپریشده—بخش سپریشده سفر.
موقعیت فعلی—مکان فعلی کاربر در سفر.
وضعیت ترافیک—وضعیت ترافیک پیشرو.
مقصد نهایی—مقصد نهایی سفر.
با فراخوانی روش setTripProgressBarEnabled() در
NavigationView
یا
NavigationFragment،
نوار پیشرفت سفر را فعال کنید.
برای مثال:
// Enable the trip progress bar.
mNavFragment.setTripProgressBarEnabled(true);
جای نوار پیشرفت سفر
- سمت چپ نوار تقریباً با سمت چپ سرعتسنج، نشانواره Google، و دکمه «مرکز کردن مجدد» (درصورت نمایان بودن) تراز میشود. عرض ۱۲ دیپی است.
- نوار پیشرفت سفر ارتفاع ثابتی دارد. برای سازگاری با محدودیتهای فضای عمودی در دستگاههای کوچکتر، رؤیتپذیری و ارتفاع نوار پیشرفت سفر براساس نقاط شکست مشخصشده در ارتفاع صفحهنمایش سازگار میشود. این نقاط شکست مستقل از جهت دستگاه و میزان فضایی است که نقشه درواقع در صفحه اشغال میکند:
- اگر نوار پیشرفت سفر با کارت پیچ یا دیگر عناصر میانای کاربر «ناوبری» همپوشانی داشته باشد، زیر آن عناصر دیگر نشان داده میشود.
| ارتفاع صفحهنمایش | رؤیتپذیری نوار پیشرفت سفر | ارتفاع نوار پیشرفت سفر | موقعیت محور y نوار پیشرفت سفر |
|---|---|---|---|
| کوچک: ۰ تا ۵۵۱ پیکسل مستقل از تراکم | غیرقابلرؤیت | موجود نیست | موجود نیست |
| متوسط: ۵۵۲ تا ۷۳۹ دیپی | قابل مشاهده | ۱۳۰ پیکسل مستقل از تراکم | بالای کنترلهای کناری شروع (سرعتسنج / نشانواره Google / دکمه «مرکز کردن مجدد») |
| بزرگ: ۷۴۰ dp و بالاتر | قابل مشاهده | ۲۹۰ پیکسل مستقل از تراکم | بالای کنترلهای کناری شروع (سرعتسنج / نشانواره Google / دکمه «مرکز کردن مجدد») |
قطبنما
کیت توسعه نرمافزار Navigation یک گرافیک قطبنما ارائه میدهد که در شرایط خاص و فقط درصورت فعال بودن در گوشه بالا سمت راست نقشه ظاهر میشود. وقتی کاربر روی قطبنما کلیک میکند، دوربین با پویانمایی به موقعیتی با زاویه صفر (جهت پیشفرض) برمیگردد و قطبنما کمی بعد محو میشود.
اگر پیمایش فعال باشد و حالت دوربین روی «دنبال کردن» تنظیم شده باشد، قطبنما نمایان میماند و با تکضرب زدن روی قطبنما، بین چشماندازهای دوربین کجشده و نمای کلی جابهجا میشوید.
برای جلوگیری از حواسپرتی راننده، اگر سرصفحه (در حالت عمودی) گسترش یابد و با موقعیت پیشفرض قطبنما تداخل داشته باشد، قطبنما در همان موقعیت باقی میماند. اگر کنترل سفارشی سرصفحه ثانویه یا نمای لوازم جانبی سرصفحه اضافه کنید، قطبنما پنهان میشود تا از تداخل واسط کاربر جلوگیری شود.
قطبنما از حالتهای روز و شب و همچنین حالت تاریک پشتیبانی میکند.
قطبنما بهطور پیشفرض فعال است. میتوانید بااستفاده از روش
compassEnabled
در کلاس GoogleMapOptions،
فعال بودن قطبنما را تنظیم کنید.
خاموش کردن ساختمانهای سهبعدی
برای دستگاههایی که عملکرد محدودی دارند، میتوانید نمایش ساختمانهای سهبعدی را با فراخوانی
GoogleMap.setBuildingsEnabled(false) خاموش کنید.
Prompt Visibility API (آزمایشی)
Prompt Visibility API به شما امکان میدهد با افزودن شنوندهای برای دریافت فراخوانی برگشتی قبلاز اینکه عنصر میانای کاربر Navigation SDK ظاهر شود و بهمحض اینکه عنصر برداشته شد، از تداخل بین عناصر میانای کاربر تولیدشده توسط Navigation SDK و عناصر میانای کاربر سفارشی خودتان جلوگیری کنید. برای اطلاعات بیشتر، ازجمله نمونههای کد، به بخش Prompt Visibility API در صفحه پیکربندی اختلالات همزمان مراجعه کنید.