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

ניתן להתאים אישית רכיבים של ממשק המשתמש והמפה של הניווט, ולהוסיף סמנים מותאמים אישית למפה. ההנחיות לגבי שינויים מותרים בממשק המשתמש של הניווט מפורטות בדף 'כללי מדיניות'.

להצגת הקוד

התאמה אישית של כותרת הניווט

משתמשים ב-NavigationFragment.setStylingOptions() או ב-NavigationView.setStylingOptions() כדי לשנות את העיצוב של כותרת הניווט ואת אינדיקטור הפנייה הבאה שמופיע מתחת לכותרת, אם הוא זמין.

ניתן להגדיר את המאפיינים הבאים:

סוג מאפייןמאפיינים
צבע הרקע
  • מצב היום הראשי – הצבע של כותרת הניווט בשעות היום
  • מצב יום משני – צבע היום של אינדיקטור הפנייה הבאה
  • מצב לילה ראשי – הצבע בלילה של כותרת הניווט
  • מצב לילה משני – הצבע בלילה של אינדיקטור הפנייה הבאה
רכיבי טקסט להוראות
  • צבע הטקסט
  • גופן
  • גודל הטקסט בשורה הראשונה
  • גודל הטקסט של השורה השנייה
רכיבי טקסט לשלבים הבאים
  • גופן
  • צבע הטקסט של ערך המרחק
  • גודל הטקסט של ערך המרחק
  • צבע הטקסט של יחידות המרחק
  • גודל הטקסט של יחידות המרחק
סמלי התמרון
  • צבע סמל התמרון הגדול
  • צבע סמל התמרון הקטן
הנחייה בין נתיבים
  • צבע של נתיב או נתיבים מומלצים

הדוגמה הבאה מציגה איך להגדיר את אפשרויות הסגנון:

private NavigationFragment mNavFragment;
mNavFragment = (NavigationFragment) 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));

השבתה של שכבת התנועה

באמצעות NavigationMap.setTrafficEnabled() ניתן להפעיל או להשבית את שכבת תעבורת הנתונים במפה. ההגדרה הזו משפיעה על המדדים של צפיפות התנועה שמוצגים במפה באופן כללי, אבל לא על מדדי התנועה במסלול שמוצג על ידי כלי הניווט.

private NavigationMap mMap;
// Get the map.
mMap = mNavFragment.getMap();
// Turn off the traffic layer on the map.
mMap.setTrafficEnabled(false);

הוספת סמנים בהתאמה אישית

ניתן להוסיף למפה סמנים מותאמים אישית כדי לציין נקודות עניין באפליקציה או למשתמשים. לדוגמה, כדאי לציין את נקודת האיסוף בסוף המסלול. השתמשו ב-NavigationMap.addMarker() כדי להוסיף סמן, וב-NavigationMap.setOnMarkerClickListener() כדי להאזין להקשות על עט סימון.

בקוד שבהמשך מופיע סמל ששמור במשאבים שניתן לצייר של הפרויקט, R.drawable.ic_person_pin_48dp. תוכלו להשתמש בכל תמונה שמתאימה לאפליקציה שלכם.

// Place a marker at the final destination.
if (mNavigator.getCurrentRouteSegment() != null) {
    LatLng destinationLatLng = mNavigator.getCurrentRouteSegment()
        .getDestinationLatLng();

    Bitmap destinationMarkerIcon = BitmapFactory.decodeResource(
            getResources(), R.drawable.ic_person_pin_48dp);

    mMap.addMarker(new MarkerOptions()
            .position(destinationLatLng)
            .icon(destinationMarkerIcon)
            .title("Destination marker"));

    // Listen for a tap on the marker.
    mMap.setOnMarkerClickListener(new NavigationMap.OnMarkerClickListener() {
        @Override
        public void onMarkerClick(Marker marker) {
            displayMessage("Marker tapped: "
                    + marker.getTitle() + ", at location "
                    + marker.getPosition().latitude + ", "
                    + marker.getPosition().longitude);
        }
    });
}

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

טקסט צף

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

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

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

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

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

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

אפשר לשלוט באופן פרוגרמטי בהתנהגות של מצב לילה. משתמשים ב-NavigationFragment.setForceNightMode(), ב-NavigationView.setForceNightMode() או ב-SupportNavigationFragment.setForceNightMode() כדי להפעיל או להשבית את מצב הלילה, או לאפשר ל-API של הניווט לשלוט בו.

  • AUTO מאפשר ל-SDK של הניווט לקבוע את המצב המתאים בהתאם למיקום המכשיר ולזמן המקומי.
  • FORCE_NIGHT מאלצת הפעלה של מצב לילה.
  • הפקודה FORCE_DAY מאלצת הפעלה של מצב יום.

בדוגמה הבאה אפשר לראות אילוץ הפעלה של מצב לילה בתוך קטע ניווט:

// Force night mode on.
mNavFragment.setForceNightMode(FORCE_NIGHT);

הצגת רשימת המסלול

קודם כל יוצרים את התצוגה ומוסיפים אותה להיררכיה.

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, בדיוק כמו שהם מועברים באמצעות NaviagtionView. למשל:

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);