באמצעות Navigation SDK ל-Android, אתם יכולים לשנות את חוויית השימוש במפה על ידי קביעה אילו רכיבים ורכיבים אינטראקטיביים מובנים של ממשק המשתמש יופיעו במפה. אתם יכולים גם לשנות את המראה של ממשק המשתמש של הניווט. בדף המדיניות מפורטות הנחיות לגבי שינויים מקובלים בממשק המשתמש של הניווט.
במסמך הזה מוסבר איך לשנות את ממשק המשתמש של המפה בשתי דרכים:
רכיבי ממשק המשתמש של המפה
כדי להציב רכיבים מותאמים אישית של ממשק המשתמש בתצוגת הניווט, השתמשו ברכיבים האינטראקטיביים של ממשק המשתמש של המפה כדי למקם אותם בצורה נכונה. כשפריסת ברירת המחדל משתנה, Navigation SDK ל-Android משנה באופן אוטומטי את המיקום של הפקדים בהתאמה אישית.
אפשר להגדיר תצוגת בקרה מותאמת אישית אחת בכל פעם לכל מיקום. אם העיצוב שלכם דורש כמה רכיבים בממשק המשתמש, אתם יכולים להציב אותם ב-ViewGroup ולהעביר אותם ל-method setCustomControl.
ה-method setCustomControl מספק מיקומים כפי שהוגדרו ב-enum CustomControlPosition:
SECONDARY_HEADER(מופיע רק במצב לאורך)BOTTOM_START_BELOWBOTTOM_END_BELOWFOOTER
הוספת אמצעי בקרה בהתאמה אישית
- יוצרים תצוגת Android עם רכיב ממשק המשתמש או ViewGroup בהתאמה אישית.
- מנפחים את ה-XML או יוצרים מופע של התצוגה המותאמת אישית כדי לקבל מופע של התצוגה.
משתמשים ב-
NavigationView.setCustomControlאו ב-NavigationFragment.setCustomControlעם המיקום של הפקד בהתאמה אישית שנבחר מה-enumCustomControlPosition.בדוגמה הבאה נוצר קטע ונוסף פקד מותאם אישית במיקום של הכותרת המשנית.
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) זזים למעלה כדי להתאים לגובה של תצוגת הפקד בהתאמה אישית. הפקד הזה נמצא בתוך גבולות המפה שמוצגים, כך שכל מרווח שמוסיפים בקצה התחתון או בקצה הסופי של המפה ישנה גם את המיקום של הפקד הזה.
Footer
כדי להשתמש במיקום הזה של הפקד המותאם אישית, מעבירים את המיקום 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, הכותרת התחתונה המותאמת אישית היא ברוחב חצי ומיושרת לצד ההתחלה (הצד השמאלי ב-LTR), בדיוק כמו כרטיסיית פרטי זמן הגעה משוער של Nav SDK. הפקדים המותאמים אישית במיקום CustomControlPosition.BOTTOM_START_BELOW ורכיבי ממשק המשתמש של Nav SDK, כמו הלחצן "מרכוז מחדש" והלוגו של Google, ממוקמים מעל הכותרת התחתונה של הפקדים המותאמים אישית. הפקדים המותאמים אישית במיקום CustomControlPosition.BOTTOM_END_BELOW וכל רכיבי ממשק המשתמש של Nav SDK לאורך הצד הסופי (הצד הימני ב-LTR) נשארים מיושרים עם החלק התחתון של המפה. המיקום של סמל החץ לא משתנה כשיש כותרת תחתונה בהתאמה אישית, כי הכותרת התחתונה לא מגיעה עד לקצה המפה.
פקדים בהתאמה אישית במיקומים CustomControlPosition.BOTTOM_START_BELOW ו-CustomControlPosition.BOTTOM_END_BELOW, וגם רכיבים בממשק המשתמש של Nav SDK כמו הלחצן "חזרה למרכז" והלוגו של Google, ממוקמים מעל הכותרת התחתונה של הפקד בהתאמה אישית.
אביזרים לממשק המשתמש של המפה
Navigation SDK ל-Android מספק אביזרי ממשק משתמש שמופיעים במהלך הניווט, בדומה לאלה שקיימים באפליקציית מפות Google ל-Android. אתם יכולים לשנות את החשיפה או את המראה של אמצעי הבקרה האלה, כמו שמתואר בקטע הזה. השינויים שתבצעו כאן יבואו לידי ביטוי בסשן הניווט הבא.
בדף המדיניות מפורטות הנחיות לגבי שינויים מקובלים בממשק המשתמש של הניווט.
הצגת הקוד
הדגשת היעד והכניסות אליו
כשיוצרים יעד באמצעות placeID, המבנה של היעד יודגש ויוצג סמל של כניסה, כשאפשר. הרמזים החזותיים האלה עוזרים למשתמשים להבחין ביעד ולנווט אליו.
כדי ליצור יעד עם placeID, משתמשים ב-method 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));
רמזורים ותמרורי עצור

במהלך ניווט פעיל, במפה מוצגים רמזורים ותמרורי עצירה כדי לתת למשתמשים יותר הקשר לגבי המסלול והצעדים הבאים בניווט. החל מגרסה 8.0.0, אי אפשר להשבית את התכונה הזו.
הוספת סמנים בהתאמה אישית
Navigation SDK ל-Android משתמש עכשיו בממשקי ה-API של מפות Google כדי להציג סמנים. מידע נוסף זמין במאמרי העזרה של Maps API.
טקסט צף
אתם יכולים להוסיף טקסט צף בכל מקום באפליקציה, כל עוד הוא לא מכסה את השיוך ל-Google. ה-Navigation SDK לא תומך בעיגון הטקסט לקו רוחב/קו אורך במפה או לתווית. מידע נוסף זמין במאמר חלונות מידע.
הצגת המהירות המותרת
אפשר להציג או להסתיר את סמל המהירות המותרת באופן פרוגרמטי. משתמשים בסמל
NavigationView.setSpeedLimitIconEnabled()
או
NavigationFragment.setSpeedLimitIconEnabled()
כדי להציג או להסתיר את סמל המהירות המותרת. כשהאפשרות מופעלת, סמל המהירות המקסימלית המותרת מוצג בפינה התחתונה במהלך ההנחיה. הסמל מציג את המהירות המותרת בכביש שבו הרכב נוסע. הסמל מופיע רק במקומות שבהם יש נתונים מהימנים על מגבלת המהירות.
// Display the Speed Limit icon
mNavFragment.setSpeedLimitIconEnabled(true);
סמל המהירות המותרת מוסתר באופן זמני כשמוצג הלחצן "מרכוז מחדש".
הגדרת מצב לילה
אתם יכולים לשלוט בהתנהגות של מצב הלילה באופן פרוגרמטי. אפשר להשתמש ב-NavigationView.setForceNightMode() או ב-NavigationFragment.setForceNightMode() כדי להפעיל או להשבית את מצב הלילה, או לאפשר ל-Navigation SDK ל-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();
}
הסתרת מסלולים חלופיים
כדי למנוע עומס של מידע בממשק המשתמש, אתם יכולים להציג פחות מסלולים חלופיים מברירת המחדל (שני מסלולים) או לא להציג מסלולים חלופיים בכלל. אפשר להגדיר את האפשרות הזו לפני שמאחזרים את המסלולים, על ידי קריאה ל-method 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 והכפתור "מרכוז מחדש" (כשהוא מוצג). הרוחב הוא 12dp.
- סרגל ההתקדמות של הנסיעה שומר על גובה סטטי. כדי להתאים למגבלות המרחב האנכי במכשירים קטנים יותר, החשיפה והגובה של סרגל ההתקדמות של הנסיעה משתנים בהתאם לנקודות עצירה שצוינו בגובה המסך. נקודות העצירה האלה לא תלויות בכיוון המכשיר ובכמות השטח שהמפה תופסת בפועל במסך:
- אם סרגל ההתקדמות של הנסיעה חופף לכרטיס הפנייה או לרכיבים אחרים בממשק המשתמש של הניווט, הוא מופיע מתחת לרכיבים האחרים האלה.
| גובה המסך | הצגה של סרגל ההתקדמות במסלול | גובה סרגל ההתקדמות של הנסיעה | מיקום ציר ה-Y של סרגל ההתקדמות של הנסיעה |
|---|---|---|---|
| קטן: 0dp עד 551dp | לא גלוי | לא רלוונטי | לא רלוונטי |
| בינוני: 552dp עד 739dp | גלוי | 130dp | מעל אמצעי הבקרה בצד ההתחלה (מד מהירות / הלוגו של Google / לחצן המרכוז מחדש) |
| גדול: 740dp ומעלה | גלוי | 290 dp | מעל אמצעי הבקרה בצד ההתחלה (מד מהירות / הלוגו של Google / לחצן המרכוז מחדש) |
מצפן
ה-Navigation SDK מספק גרפיקה של מצפן שמופיעה בפינה הימנית העליונה של המפה בנסיבות מסוימות, ורק כשהיא מופעלת. כשהמשתמש לוחץ על המצפן, המצלמה חוזרת במיקום עם כיוון אפס (כיוון ברירת המחדל) והמצפן נעלם זמן קצר לאחר מכן.
אם הניווט מופעל ומצב המצלמה מוגדר ל "מעקב", המצפן נשאר גלוי. לחיצה על המצפן מחליפה בין נקודות המבט של המצלמה: מוטה וסקירה כללית.
כדי למנוע הסחת דעת של הנהג, המצפן נשאר באותו מיקום אם הכותרת (במצב לאורך) מתרחבת ומתנגשת עם מיקום ברירת המחדל של המצפן. אם מוסיפים פקד מותאם אישית לכותרת משנית או תצוגת אביזר לכותרת, המצפן מוסתר כדי למנוע התנגשויות בממשק המשתמש.
המצפן תומך במצב יום ובמצב לילה, וגם במצב כהה.
המצפן מופעל כברירת מחדל. אפשר להגדיר אם המצפן מופעל באמצעות השיטה compassEnabled במחלקה GoogleMapOptions.
השבתת בניינים בתלת-ממד
במכשירים עם ביצועים מוגבלים, אפשר להשבית את הצגת הבניינים בתלת-ממד באמצעות קריאה ל-GoogleMap.setBuildingsEnabled(false).
Prompt Visibility API (ניסיוני)
Prompt Visibility API מאפשר לכם להימנע מהתנגשויות בין רכיבים בממשק המשתמש שנוצרו על ידי Navigation SDK לבין רכיבים בממשק המשתמש בהתאמה אישית. כדי לעשות את זה, צריך להוסיף מאזין שיקבל קריאה חוזרת (callback) לפני שרכיב בממשק המשתמש של Navigation SDK עומד להופיע וברגע שהרכיב מוסר. מידע נוסף, כולל דוגמאות קוד, זמין בקטע Prompt Visibility API בדף הגדרת שיבושים בזמן אמת.