تخصيص واجهة مستخدم التنقل

يمكنك تخصيص عناصر واجهة مستخدم التنقل والخريطة، وإضافة علامات مخصصة إلى الخريطة. يُرجى الرجوع إلى صفحة السياسات للحصول على إرشادات حول التعديلات المقبولة على واجهة مستخدم التنقل.

الاطّلاع على الرمز

تخصيص عنوان التنقل

يمكنك استخدام 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() لتفعيل الوضع الليلي أو إيقافه، أو اسمح لحزمة تطوير البرامج (SDK) الخاصة بميزة "التنقل" بالتحكّم فيه.

  • 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();
}

إخفاء المسارات البديلة

عندما تصبح واجهة المستخدم مزدحمة بكم كبير جدًا من المعلومات، يمكنك تقليل الفوضى من خلال عرض مسارات بديلة أقل من المسار التلقائي (مساران)، أو من خلال عدم عرض أي مسارات بديلة على الإطلاق. يمكنك ضبط هذا الخيار قبل استرجاع المسارات من خلال استدعاء الطريقة 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);