שינוי ממשק המשתמש של הניווט

באמצעות Navigation SDK ל-Android, אפשר לשנות את חוויית המשתמש במפה על ידי קביעת הרכיבים והפקדים המובנים של ממשק המשתמש שיופיעו במפה. אפשר גם לשנות את המראה החזותי של ממשק המשתמש של הניווט. בדף המדיניות מפורטות הנחיות לגבי שינויים מותרים בממשק המשתמש של הניווט.

במסמך הזה מוסבר איך לשנות את ממשק המשתמש של המפה בשתי דרכים:

פקדי ממשק המשתמש של המפה

כדי למקם רכיבי ממשק משתמש מותאמים אישית בתצוגת הניווט, משתמשים בפקדים של ממשק המשתמש של המפה כדי למקם אותם בצורה נכונה. כשהפריסה המובנית משתנה, המערכת של Navigation SDK ל-Android ממקמת מחדש את הפקדים המותאמים אישית באופן אוטומטי. אפשר להגדיר תצוגה אחת של אמצעי הבקרה בהתאמה אישית בכל פעם לכל מיקום. אם העיצוב שלכם מחייב כמה רכיבי ממשק משתמש, תוכלו להציב אותם ב-ViewGroup ולהעביר אותו לשיטה setCustomControl.

ה-method‏ setCustomControl מספק את המיקומים כפי שמוגדרים ב-CustomControlPosition enum:

  • SECONDARY_HEADER (מופיע בפריסה לאורך בלבד)
  • BOTTOM_START_BELOW
  • BOTTOM_END_BELOW
  • FOOTER
מיקומי שליטה מותאמים אישית בכיוון לאורך.
מיקום מותאם אישית של אמצעי הבקרה בכיוון לאורך
מיקומי שליטה בהתאמה אישית לכיוון לרוחב.
מיקומי אמצעי בקרה בהתאמה אישית לכיוון לרוחב

הוספת אמצעי בקרה בהתאמה אישית

  1. יוצרים View של Android עם רכיב ממשק המשתמש או ה-ViewGroup בהתאמה אישית.
  2. מנפחים את ה-XML או יוצרים מופע של התצוגה בהתאמה אישית כדי לקבל מופע של התצוגה.
  3. משתמשים ב-NavigationView.setCustomControl או ב-SupportNavigationFragment.setCustomControl עם המיקום של אמצעי הבקרה המותאם אישית שנבחר מתוך CustomControlPosition enum.

    בדוגמה הבאה נוצר קטע קוד ומתווסף פקד מותאם אישית במיקום הכותרת המשנית.

     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, ממוקמים מעל הכותרת התחתונה של אמצעי הבקרה בהתאמה אישית. מיקום ברירת המחדל של החץ המעוקל מביאה בחשבון את הגובה המותאם אישית של הכותרת התחתונה.

ב-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().

שינוי הכותרת של תפריט הניווט

אפשר להשתמש ב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 ל-Android משתמש עכשיו בממשקי ה-API של מפות Google לסימונים. מידע נוסף זמין במסמכי העזרה של Maps API.

טקסט צף

אפשר להוסיף טקסט צף בכל מקום באפליקציה, בתנאי שהוא לא מכסה את השיוך ל-Google. ב-Navigation SDK אין תמיכה בהצמדת טקסט לקו הרוחב/אורך במפה או לתווית. מידע נוסף זמין במאמר חלונות מידע.

הצגת מגבלת המהירות

אפשר להציג או להסתיר את סמל המהירות המותרת באופן פרוגרמטי. משתמשים בNavigationView.setSpeedLimitIconEnabled() או בSupportNavigationFragment.setSpeedLimitIconEnabled() כדי להציג או להסתיר את סמל מגבלת המהירות. כשהאפשרות הזו מופעלת, סמל המהירות המותרת מוצג בפינה התחתונה במהלך ההנחיות. הסמל מציג את מגבלת המהירות של הכביש שבו הרכב נוסע. הסמל מופיע רק במיקומים שבהם יש נתונים מהימנים לגבי מגבלות המהירות.

 // Display the Speed Limit icon
 mNavFragment.setSpeedLimitIconEnabled(true);

הסמל של המהירות המותרת מוסתר באופן זמני כשהלחצן 'מרכוז מחדש' מוצג.

הגדרת מצב לילה

אתם יכולים לשלוט באופן פרוגרמטי בהתנהגות של מצב הלילה. אפשר להשתמש בNavigationView.setForceNightMode() או בSupportNavigationFragment.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();
}

הסתרת מסלולים חלופיים

כשממשק המשתמש עמוס במידע רב מדי, אפשר להציג פחות מסלולים חלופיים מברירת המחדל (שניים), או לא להציג מסלולים חלופיים בכלל. אפשר להגדיר את האפשרות הזו לפני שאתם מאחזרים את המסלולים, על ידי קריאה לשיטה 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 והלחצן 'מרכוז מחדש' (אם הוא גלוי). הרוחב הוא 12dp.
  • סרגל ההתקדמות של הנסיעה נשאר בגובה סטטי. כדי להתאים את האפשרות הזו למגבלות המרחב האנכי במכשירים קטנים יותר, ההצגה והגובה של סרגל ההתקדמות של הנסיעה משתנים בהתאם לנקודות הציון שצוינו בגובה המסך. נקודות הציון האלה לא תלויות בכיוון המכשיר ובכמות המקום שהמפה תופסת בפועל במסך:
  • גובה המסך הצגה של סרגל ההתקדמות של הנסיעה גובה סרגל ההתקדמות של הנסיעה המיקום של ציר ה-Y בסרגל ההתקדמות של הנסיעה
    קטן: 0dp עד 551dp לא גלוי לא רלוונטי לא רלוונטי
    בינוני: 552dp עד 739dp גלוי 130 dp מעל הפקדים בצד 'התחלה' (מד מהירות / הלוגו של Google / כפתור למרכוז מחדש)
    גדול: 740dp ומעלה גלוי 290 dp מעל הפקדים בצד 'התחלה' (מד מהירות / הלוגו של Google / כפתור למרכוז מחדש)
  • אם סרגל ההתקדמות של הנסיעה חופף לכרטיס הפניה או לאלמנטים אחרים בממשק המשתמש של הניווט, הוא יופיע מתחת לאלמנטים האלה.

Prompt Visibility API (ניסיוני)

באמצעות Prompt Visibility API אפשר למנוע התנגשויות בין רכיבי ממשק המשתמש שנוצרו על ידי Navigation SDK לבין רכיבי ממשק המשתמש המותאמים אישית שלכם. לשם כך, מוסיפים מאזין שיקבל קריאה חוזרת לפני שרכיב ממשק המשתמש של Navigation SDK עומד להופיע, וכשהרכיב יוסר. למידע נוסף, כולל דוגמאות קוד, תוכלו לקרוא את הקטע Prompt Visibility API בדף Configure real-time-disruptions.