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

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

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

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

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

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

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

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

  1. יוצרים Android View עם רכיב UI מותאם אישית או ViewGroup.
  2. מנפחים את ה-XML או יוצרים מופע של התצוגה המותאמת אישית כדי לקבל מופע של התצוגה.
  3. משתמשים ב-NavigationView.setCustomControl או ב-SupportNavigationFragment.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, ממוקמים מעל הכותרת התחתונה של הפקד המותאם אישית. מיקום ברירת המחדל של החץ מתחשב בגובה הכותרת התחתונה המותאמת אישית.

ב-landscape mode, הכותרת התחתונה המותאמת אישית היא ברוחב חצי מהמסך ומיושרת לצד ההתחלה (צד ימין ב-RTL, צד שמאל ב-LTR), בדיוק כמו כרטיס ה-ETA ב-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 מספק רכיבי UI שמופיעים במהלך הניווט, בדומה לאלה שמופיעים באפליקציית מפות 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 משתמש עכשיו ב-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 ל-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 ומעלה גלוי ‫290dp מעל הפקדים של צד ההתחלה (מד מהירות / לוגו Google / לחצן מרכוז מחדש)
  • אם סרגל ההתקדמות של הנסיעה חופף לכרטיס הפנייה או לאלמנטים אחרים בממשק המשתמש של הניווט, הוא יופיע מתחת לאלמנטים האחרים.

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

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