باستخدام Navigation SDK for Android، يمكنك تعديل تجربة المستخدم مع خريطتك من خلال تحديد عناصر التحكّم وعناصر واجهة المستخدم المضمّنة التي تظهر على الخريطة. يمكنك أيضًا تعديل المظهر المرئي لواجهة مستخدم التنقّل. يُرجى الرجوع إلى صفحة السياسات للاطّلاع على إرشادات حول التعديلات المقبولة على واجهة مستخدم التنقّل.
توضّح هذه المستندات كيفية تعديل واجهة مستخدم خريطتك بطريقتَين:
عناصر التحكّم في واجهة مستخدم الخريطة
.لوضع عناصر واجهة مستخدم مخصّصة في طريقة عرض التنقّل، استخدِم عناصر التحكّم في واجهة مستخدم الخريطة من أجل تحديد الموضع المناسب. عندما يتغيّر التنسيق المضمّن، يعيد Navigation SDK for Android تلقائيًا وضع عناصر التحكّم المخصّصة. يمكنك ضبط طريقة عرض واحدة لعنصر تحكّم مخصّص في كل موضع في كل مرة. إذا كان تصميمك يتطلّب عناصر متعدّدة في واجهة المستخدم، يمكنك وضعها في ViewGroup وتمريرها إلى طريقة setCustomControl.
توفر setCustomControl
الطريقة
المواضع المحددة في CustomControlPosition
التعداد:
SECONDARY_HEADER(يظهر في الوضع العمودي فقط)BOTTOM_START_BELOWBOTTOM_END_BELOWFOOTER
إضافة عنصر تحكّم مخصّص
- أنشئ طريقة عرض Android تتضمّن عنصرًا في واجهة المستخدم المخصّص أو ViewGroup.
- وسِّع ملف XML أو أنشئ طريقة العرض المخصّصة للحصول على نموذج من طريقة العرض.
استخدِم
NavigationView.setCustomControlأوSupportNavigationFragment.setCustomControlمع موضع عنصر التحكّم المخصّص الذي تم اختياره منCustomControlPositionتعداد.ينشئ المثال أدناه جزءًا ويضيف عنصر تحكّم مخصّصًا في موضع العنوان الثانوي.
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 مرئية على طول الجانب من جهة النهاية (الجانب الأيسر في اللغات التي تُكتب من اليمين إلى اليسار) إلى الأعلى لتعويض ارتفاع طريقة عرض عنصر التحكّم المخصّص. يتم وضع عنصر التحكّم هذا داخل حدود الخريطة المرئية، لذا فإنّ أي مسافة داخلية تتم إضافتها إلى الحافتَين السفلية أو من جهة النهاية للخريطة ستغيّر أيضًا موضع عنصر التحكّم هذا.
التذييل
لاستخدام موضع عنصر التحكّم المخصّص هذا، مرِّر الموضع CustomControlPosition.FOOTER إلى setCustomControl.
تم تصميم موضع عنصر التحكّم المخصّص هذا لطريقة عرض تذييل مخصّصة. إذا كانت بطاقة الوقت المقدَّر للوصول في Nav SDK مرئية، يقع عنصر التحكّم هذا أعلاها. وإذا لم يكن الأمر كذلك، تتم محاذاة عنصر التحكّم مع أسفل الخريطة. على عكس عناصر التحكّم المخصّصة BOTTOM_START_BELOW وBOTTOM_END_BELOW، يتم وضع عنصر التحكّم هذا خارج حدود الخريطة المرئية، ما يعني أنّ أي مسافة داخلية تتم إضافتها إلى الخريطة لن تغيّر موضع عنصر التحكّم هذا.
في portrait mode، يكون التذييل المخصّص بعرض كامل. يتم وضع عناصر التحكّم المخصّصة في كل من الموضعين CustomControlPosition.BOTTOM_START_BELOW وCustomControlPosition.BOTTOM_END_BELOW، بالإضافة إلى عناصر واجهة مستخدم Nav SDK، مثل زر إعادة التوسيط وشعار Google، أعلى تذييل عنصر التحكّم المخصّص. يأخذ الموضع التلقائي لعلامة الشيفرون ارتفاع التذييل المخصّص في الاعتبار.
في landscape mode، يكون التذييل المخصّص بنصف العرض ومحاذيًا للجانب من جهة البداية (الجانب الأيسر في اللغات التي تُكتب من اليمين إلى اليسار)، تمامًا مثل بطاقة الوقت المقدَّر للوصول في Nav SDK. يتم وضع عناصر التحكّم المخصّصة في الموضع CustomControlPosition.BOTTOM_START_BELOW وعناصر واجهة مستخدم Nav SDK، مثل زر إعادة التوسيط وشعار Google، أعلى تذييل عنصر التحكّم المخصّص. تظل عناصر التحكّم المخصّصة في الموضع CustomControlPosition.BOTTOM_END_BELOW وأي عناصر واجهة مستخدم Nav SDK على طول الجانب من جهة النهاية (الجانب الأيسر في اللغات التي تُكتب من اليمين إلى اليسار) محاذية مع أسفل الخريطة. لا يتغيّر الموضع التلقائي لعلامة الشيفرون عند توفّر تذييل مخصّص لأنّ التذييل لا يمتد إلى الجانب من جهة النهاية للخريطة.
يتم وضع عناصر التحكّم المخصّصة في الموضعين CustomControlPosition.BOTTOM_START_BELOW وCustomControlPosition.BOTTOM_END_BELOW، بالإضافة إلى عناصر واجهة مستخدم Nav SDK، مثل زر إعادة التوسيط وشعار Google، أعلى تذييل عنصر التحكّم المخصّص.
ملحقات واجهة مستخدم الخريطة
يوفّر Navigation SDK for Android ملحقات واجهة مستخدم تظهر أثناء التنقّل بشكل مشابه لتلك المتوفّرة في تطبيق "خرائط Google" لأجهزة Android. يمكنك تعديل مستوى ظهور عناصر التحكّم هذه أو مظهرها المرئي كما هو موضّح في هذا القسم. تنعكس التغييرات التي تُجريها هنا أثناء جلسة التنقّل التالية.
يُرجى الرجوع إلى صفحة السياسات للاطّلاع على إرشادات حول التعديلات المقبولة على واجهة مستخدم التنقّل.
عرض الرمز
تمييز الوجهة والمداخل
عند إنشاء وجهة باستخدام
placeID، سيتم تمييز مبنى الوجهة وسيظهر رمز مدخل، كلما أمكن ذلك. تساعد هذه الإشارات المرئية المستخدمين في التمييز بين الوجهات والتنقّل إليها.
لإنشاء وجهة باستخدام placeID، استخدِم الـ
Waypoint.Builder.setPlaceIdString()
طريقة.

تعديل عنوان التنقّل

استخدِم
SupportNavigationFragment.setStylingOptions()
أو
NavigationView.setStylingOptions()
لتغيير مظهر عنوان التنقّل ومؤشر المنعطف التالي الذي
يظهر أسفل العنوان عندما يكون متوفرًا.
يمكنك ضبط السمات التالية:
| نوع السمة | السمات |
|---|---|
| لون الخلفية |
|
| العناصر النصية للتعليمات |
|
| العناصر النصية للخطوات التالية |
|
| رموز المناورات |
|
| توجيه خط السير |
|
يوضّح المثال التالي كيفية ضبط خيارات المظهر:
private SupportNavigationFragment mNavFragment;
mNavFragment = (SupportNavigationFragment) getFragmentManager()
.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));
تفعيل إشارات المرور وإشارات التوقف

يمكنك تفعيل عرض إشارات المرور وإشارات التوقف على الخريطة أثناء التنقّل النشط، ما يوفّر سياقًا إضافيًا للمسارات والمناورات في الرحلة.
تكون إشارات المرور وإشارات التوقف غير مفعّلة تلقائيًا في Navigation SDK. لتفعيل هذه الميزة، استدعِ
DisplayOptions
لكل ميزة على حدة.
يوضّح المثال التالي كيفية إخفاء إشارات المرور وإشارات التوقف:
DisplayOptions displayOptions =
new DisplayOptions().showTrafficLights(true).showStopSigns(true);
إضافة علامات مخصّصة
يستخدم Navigation SDK for Android الآن Google Maps APIs للعلامات. انتقِل إلى مستندات Maps API لمزيد من المعلومات.
النص العائم
يمكنك إضافة نص عائم في أي مكان في تطبيقك، شرط ألا يغطّي تحديد المصدر من Google. لا يتيح Navigation SDK ربط النص بخط العرض/خط الطول على الخريطة أو بتصنيف. انتقِل إلى النوافذ المنبثقة لمزيد من المعلومات.
عرض حد السرعة
يمكنك إظهار رمز حد السرعة أو إخفاؤه آليًا. استخدِم
NavigationView.setSpeedLimitIconEnabled()
أو
SupportNavigationFragment.setSpeedLimitIconEnabled()
لإظهار رمز حد السرعة أو إخفائه. عند تفعيل هذا الخيار، يظهر رمز حد السرعة في الزاوية السفلية أثناء التوجيه. يعرض الرمز حد السرعة على الطريق الذي تسير عليه المركبة. لا يظهر الرمز إلا في المواقع الجغرافية التي تتوفّر فيها بيانات موثوقة عن حد السرعة.
// Display the Speed Limit icon
mNavFragment.setSpeedLimitIconEnabled(true);
يتم إخفاء رمز حد السرعة مؤقتًا عند عرض زر إعادة التوسيط.
ضبط الوضع الليلي
يمكنك التحكّم آليًا في سلوك الوضع الليلي. استخدِم
NavigationView.setForceNightMode()
أو
SupportNavigationFragment.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
أو
SupportNavigationFragment.
على سبيل المثال:
// Enable the trip progress bar.
mNavFragment.setTripProgressBarEnabled(true);
تحديد موضع شريط تقدّم الرحلة
- تتم محاذاة الجانب الأيسر من الشريط تقريبًا مع الجانب الأيسر من عدّاد السرعة وشعار Google وزر إعادة التوسيط (عند ظهوره). العرض هو 12 وحدة بكسل مستقلة الكثافة.
- يحافظ شريط تقدّم الرحلة على ارتفاع ثابت. من أجل التكيّف مع قيود المساحة العمودية في الأجهزة الأصغر حجمًا، يتم تكييف مستوى ظهور شريط تقدّم الرحلة وارتفاعه استنادًا إلى نقاط التوقف المحدّدة في ارتفاع الشاشة. نقاط التوقف هذه مستقلة عن اتجاه الجهاز ومقدار المساحة التي تشغلها الخريطة فعليًا على الشاشة:
- إذا تداخل شريط تقدّم الرحلة مع بطاقة المنعطف أو عناصر واجهة مستخدم التنقّل الأخرى، سيظهر أسفل هذه العناصر الأخرى.
| ارتفاع الشاشة | مستوى ظهور شريط تقدّم الرحلة | ارتفاع شريط تقدّم الرحلة | موضع شريط تقدّم الرحلة على المحور الصادي |
|---|---|---|---|
| صغير: من 0 وحدة بكسل مستقلة الكثافة إلى 551 وحدة بكسل مستقلة الكثافة | لا يظهر | لا ينطبق | لا ينطبق |
| متوسط: من 552 وحدة بكسل مستقلة الكثافة إلى 739 وحدة بكسل مستقلة الكثافة | يظهر | 130 وحدة بكسل مستقلة الكثافة | أعلى عناصر التحكّم من جهة البداية (عدّاد السرعة / شعار Google / زر إعادة التوسيط) |
| كبير: 740 وحدة بكسل مستقلة الكثافة وأكثر | يظهر | 290 وحدة بكسل مستقلة الكثافة | أعلى عناصر التحكّم من جهة البداية (عدّاد السرعة / شعار Google / زر إعادة التوسيط) |
البوصلة
يوفّر Navigation SDK رسمًا بيانيًا للبوصلة يظهر في أعلى يسار الخريطة في ظروف معيّنة وعند تفعيل هذا الخيار فقط. عندما ينقر المستخدم على البوصلة، تعود الكاميرا بشكل متحرك إلى موضع بزاوية انحراف صفر (الاتجاه التلقائي)، ويختفي البوصلة بعد فترة قصيرة.
إذا كانت ميزة التنقّل مفعّلة وتم ضبط وضع الكاميرا على "المتابعة"، تظل البوصلة مرئية ويؤدي النقر عليها إلى التبديل بين منظورَي الكاميرا المائل والعرض العام.
لتجنُّب تشتيت انتباه السائق، تظل البوصلة في الموضع نفسه إذا توسّع العنوان (في الوضع العمودي) وتعارض مع الموضع التلقائي للبوصلة. إذا أضفت عنصر تحكّم مخصّصًا في العنوان الثانوي أو طريقة عرض ملحق العنوان، يتم إخفاء البوصلة لتجنُّب تعارضات واجهة المستخدم.
تتيح البوصلة الوضعَين النهاري والليلي، بالإضافة إلى الوضع الداكن.
البوصلة مفعّلة تلقائيًا. يمكنك ضبط ما إذا كانت البوصلة مفعّلة
باستخدام
compassEnabled
طريقة في فئة GoogleMapOptions.
إيقاف المباني الثلاثية الأبعاد
بالنسبة إلى الأجهزة التي تكون فيها الأداء محدودًا، يمكنك إيقاف عرض المباني الثلاثية الأبعاد
من خلال استدعاء
GoogleMap.setBuildingsEnabled(false).
Prompt Visibility API (تجريبي)
تتيح لك Prompt Visibility API تجنُّب التعارضات بين عناصر واجهة المستخدم التي تم إنشاؤها بواسطة Navigation SDK وعناصر واجهة المستخدم المخصّصة من خلال إضافة متتبِّع لتلقّي عملية استدعاء قبل أن يظهر عنصر في واجهة المستخدم Navigation SDK وبمجرد إزالة العنصر. لمزيد من المعلومات، بما في ذلك نماذج الرموز، يُرجى الاطّلاع على قسم Prompt Visibility API في صفحة ضبط حالات الانقطاع في الوقت الفعلي.