แก้ไข UI การนําทาง

การใช้ Navigation SDK สำหรับ Android ช่วยให้คุณสามารถปรับเปลี่ยนประสบการณ์ของผู้ใช้ในแผนที่ โดยจะกำหนดตัวควบคุมและองค์ประกอบ UI ในตัวที่จะแสดงบนแผนที่ คุณยังสามารถปรับลักษณะที่ปรากฏของ UI การนำทางได้ด้วย โปรดอ่านหน้านโยบายเพื่อดูหลักเกณฑ์เกี่ยวกับการแก้ไขที่ยอมรับได้ใน UI การนำทาง

เอกสารนี้จะอธิบายวิธีปรับเปลี่ยนอินเทอร์เฟซผู้ใช้ของแผนที่ได้ 2 วิธี ดังนี้

ตัวควบคุม UI ของแผนที่

ตัวควบคุม UI ของแผนที่จะอยู่ที่ด้านบนของมุมมองการนำทาง Navigation SDK สำหรับ Android จะย้ายตำแหน่งการควบคุมที่กำหนดเองโดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงเลย์เอาต์ในตัว สำหรับแต่ละตำแหน่งของเลย์เอาต์ คุณจะตั้งค่าการควบคุมที่กำหนดเองได้ 1 รายการ โดยการควบคุมที่กำหนดเองจะเป็นองค์ประกอบ UI เดียวก็ได้ หรือหากการออกแบบต้องการมากกว่านั้น คุณก็ใช้ ViewGroup กับองค์ประกอบ UI หลายรายการได้

เมธอด setCustomControl จะระบุตำแหน่งตามที่ระบุไว้ใน enum ของ CustomControlPosition

  • SECONDARY_HEADER (ปรากฏในโหมดแนวตั้งเท่านั้น)
  • BOTTOM_START_BELOW
  • BOTTOM_END_BELOW

รูปภาพแสดงตัวอย่างตำแหน่งต่างๆ ของตัวควบคุม UI ที่แจ้งให้คนขับทราบตำแหน่งของนักแข่ง

ตำแหน่งการควบคุมที่กำหนดเอง

เพิ่มส่วนหัวรองที่กำหนดเอง

โดยค่าเริ่มต้น เลย์เอาต์หน้าจอในโหมดการนำทางจะมีตำแหน่งสำหรับส่วนหัวรองที่อยู่ใต้ส่วนหัวหลัก ส่วนหัวรองนี้จะปรากฏขึ้นเมื่อจำเป็น เช่น ต้องมีคำแนะนำช่องทาง แอปของคุณสามารถใช้ตำแหน่งส่วนหัวรองนี้ ของเลย์เอาต์สำหรับเนื้อหาที่กำหนดเองได้ เมื่อใช้ฟีเจอร์นี้ การควบคุมจะครอบคลุมเนื้อหาส่วนหัวรองเริ่มต้น หากมุมมองการนำทางมีพื้นหลังอยู่ พื้นหลังนั้น จะยังคงอยู่ในที่ซึ่งส่วนหัวรองบังอยู่ เมื่อแอปนำการควบคุมที่กำหนดเองออก ส่วนหัวรองเริ่มต้นจะปรากฏในตำแหน่งดังกล่าว

ตำแหน่งส่วนหัวรองที่กำหนดเองจะจัดแนวขอบบนให้ตรงกับขอบด้านล่างของส่วนหัวหลัก ตำแหน่งนี้ใช้ได้เฉพาะใน portrait mode ใน landscape mode ส่วนหัวรองจะใช้งานไม่ได้และเลย์เอาต์จะไม่เปลี่ยนแปลง

  1. สร้าง Android View ด้วยองค์ประกอบ UI ที่กำหนดเองหรือ ViewGroup
  2. ขยาย XML หรือสร้างอินสแตนซ์ที่กำหนดเองเพื่อรับอินสแตนซ์ของข้อมูลพร็อพเพอร์ตี้เพื่อเพิ่มเป็นส่วนหัวรอง
  3. ใช้ NavigationView.setCustomControl หรือ SupportNavigationFragment.setCustomControl กับ CustomControlPosition เป็น SECONDARY_HEADER

    ตัวอย่างด้านล่างจะสร้างส่วนย่อยและเพิ่มการควบคุมที่กำหนดเองในตำแหน่งส่วนหัวรอง

     mNavFragment.setCustomControl(getLayoutInflater().
       inflate(R.layout.your_custom_control, null),
       CustomControlPosition.SECONDARY_HEADER);
    

นำส่วนหัวรองออก

หากต้องการนำส่วนหัวรองออกและกลับไปที่เนื้อหาเริ่มต้น ให้ใช้เมธอด setCustomControl

ตั้งค่ามุมมองเป็น null เพื่อนำมุมมองออก

mNavFragment.setCustomControl(null, CustomControlPosition.SECONDARY_HEADER);

เพิ่มตัวควบคุมที่กำหนดเองที่ด้านล่างของมุมมองการนำทาง

แอปของคุณสามารถระบุตัวควบคุมที่กำหนดเองซึ่งจัดชิดขอบด้านล่างของมุมมองการนำทาง เมื่อแอปเพิ่มการควบคุมที่กำหนดเอง ปุ่มปรับกึ่งกลางใหม่และโลโก้ Google จะเลื่อนขึ้นเพื่อให้พอดีกับตัวควบคุม

  1. สร้างมุมมอง Android ซึ่งมีองค์ประกอบ UI หรือกลุ่มมุมมองที่ต้องการเพิ่ม
  2. สร้างมุมมองหรือส่วนย่อยสำหรับการนำทาง
  3. เรียกใช้เมธอด setCustomControl ในมุมมองหรือส่วนย่อยการนำทาง และระบุการควบคุมและตำแหน่งที่จะใช้

ตัวอย่างต่อไปนี้แสดง View ที่กำหนดเองซึ่งเพิ่มใน SupportNavigationFragment

private SupportNavigationFragment mNavFragment;
mNavFragment = (SupportNavigationFragment)
  getFragmentManager().findFragmentById(R.id.navigation_fragment);

// Create the custom control view.
MyCustomView myCustomView = new MyCustomView();

// Add the custom control to the bottom end corner of the layout.
mNavFragment.setCustomControl(myCustomView, CustomControlPosition.
  BOTTOM_END_BELOW);

นำการควบคุมที่กำหนดเองออก

หากต้องการนำการควบคุมที่กำหนดเองออก ให้ใช้เมธอด setCustomControl และระบุตำแหน่งของการควบคุมที่คุณต้องการนำออก

ตั้งค่ามุมมองเป็น null สำหรับตำแหน่งนั้น

mNavFragment.setCustomControl(null, CustomControlPosition.BOTTOM_END_BELOW);

อุปกรณ์เสริม UI ของแผนที่

การนำทาง SDK สำหรับ Android มีอุปกรณ์เสริมสำหรับ UI ที่ปรากฏขึ้นในระหว่าง การนำทางซึ่งคล้ายกับที่อยู่ในแอปพลิเคชัน Google แผนที่สำหรับ Android คุณสามารถปรับระดับการเข้าถึงหรือลักษณะที่ปรากฏของการควบคุมเหล่านี้ตามที่อธิบายไว้ในส่วนนี้ การเปลี่ยนแปลงที่คุณทำที่นี่จะมีผลระหว่างการเดินทางครั้งต่อไปของคนขับ

โปรดอ่านหน้านโยบายเพื่อดูหลักเกณฑ์เกี่ยวกับการแก้ไข UI การนำทางที่ยอมรับได้

ดูโค้ด

แก้ไขส่วนหัวของการนำทาง

ใช้ SupportNavigationFragment.setStylingOptions() หรือ NavigationView.setStylingOptions() เพื่อเปลี่ยนธีมของส่วนหัวการนำทางและสัญญาณบอกสถานะสำหรับเลี้ยวถัดไปซึ่งปรากฏใต้ส่วนหัว หากมี

คุณตั้งค่าแอตทริบิวต์ต่อไปนี้ได้

ประเภทแอตทริบิวต์Attributes
สีพื้นหลัง
  • โหมดวันหลัก - สีเวลากลางวันของส่วนหัวของการนำทาง
  • โหมดวันรอง - สีเวลากลางวันของสัญญาณบอกสถานะเลี้ยวถัดไป
  • โหมดกลางคืนหลัก - สีเวลากลางคืนของส่วนหัวของการนำทาง
  • โหมดกลางคืนรอง - สีเวลากลางคืนของสัญญาณบอกสถานะเลี้ยวถัดไป
องค์ประกอบของข้อความสำหรับวิธีการ
  • สีของข้อความ
  • แบบอักษร
  • ขนาดข้อความของแถวแรก
  • ขนาดข้อความของแถวที่ 2
องค์ประกอบของข้อความสำหรับขั้นตอนถัดไป
  • แบบอักษร
  • สีข้อความของค่าระยะทาง
  • ขนาดข้อความของค่าระยะทาง
  • สีข้อความของหน่วยระยะทาง
  • ขนาดข้อความของหน่วยระยะทาง
ไอคอนบังคับทิศทาง
  • สีของไอคอนเคลื่อนที่ขนาดใหญ่
  • สีของไอคอนเครื่องมือสลับขนาดเล็ก
คำแนะนำช่องทาง
  • สีของช่องทางที่แนะนำ

ตัวอย่างต่อไปนี้จะแสดงวิธีตั้งค่าตัวเลือกการจัดรูปแบบ

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

เปิดไฟจราจรและป้ายหยุด

คุณเปิดใช้ไฟจราจรและป้ายหยุดได้ใน UI ของแผนที่ ฟีเจอร์นี้ช่วยให้คนขับสามารถแสดงไฟจราจรหรือไอคอนป้ายหยุดระหว่างทางได้ ซึ่งจะให้บริบทที่ดียิ่งขึ้นสำหรับการเดินทางที่มีประสิทธิภาพและแม่นยำยิ่งขึ้น

ไฟจราจรและป้ายหยุดจะปิดใช้ใน Navigation SDK โดยค่าเริ่มต้น หากต้องการเปิดใช้ฟีเจอร์นี้ ให้เรียกใช้ DisplayOptions สำหรับแต่ละฟีเจอร์แยกกัน

DisplayOptions displayOptions =
  new DisplayOptions().showTrafficLights(true).showStopSigns(true);

เพิ่มเครื่องหมายที่กำหนดเอง

ตอนนี้ Navigation SDK สำหรับ Android ใช้ Google Maps API สำหรับเครื่องหมายแล้ว ดูข้อมูลเพิ่มเติมในเอกสารประกอบเกี่ยวกับ Maps API

ข้อความแบบลอย

คุณสามารถเพิ่มข้อความแบบลอยที่ตำแหน่งใดก็ได้ในแอป ในกรณีที่ข้อความไม่ครอบคลุมการระบุแหล่งที่มาของ Google การนำทาง SDK ไม่รองรับการตรึงข้อความกับละติจูด/ลองจิจูดบนแผนที่หรือกับป้ายกำกับ ไปที่หน้าต่างข้อมูลสำหรับข้อมูลเพิ่มเติม

แสดงขีดจำกัดความเร็ว

คุณแสดงหรือซ่อนไอคอนการจำกัดความเร็วได้แบบเป็นโปรแกรม ใช้ NavigationView.setSpeedLimitIconEnabled() หรือ SupportNavigationFragment.setSpeedLimitIconEnabled() เพื่อแสดงหรือซ่อนไอคอนจำกัดความเร็ว เมื่อเปิดใช้ ไอคอนการจำกัดความเร็ว จะแสดงที่มุมด้านล่างในระหว่างการนำทาง ไอคอนแสดงขีดจำกัดความเร็วของถนนที่รถวิ่งอยู่ ไอคอนนี้จะปรากฏในตำแหน่งที่มีข้อมูลขีดจำกัดความเร็วที่เชื่อถือได้เท่านั้น

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

ไอคอนจำกัดความเร็วจะซ่อนไว้ชั่วคราวเมื่อปุ่มจัดกึ่งกลางใหม่ปรากฏขึ้น

ตั้งค่าโหมดกลางคืน

คุณควบคุมการทำงานของโหมดกลางคืนได้โดยใช้โปรแกรม ใช้ NavigationView.setForceNightMode() หรือ SupportNavigationFragment.setForceNightMode() เพื่อเปิดหรือปิดโหมดกลางคืน หรือให้ Navigation SDK สำหรับ Android ควบคุม

  • AUTO ให้ 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();
}

ซ่อนเส้นทางอื่น

เมื่ออินเทอร์เฟซผู้ใช้เต็มไปด้วยข้อมูลมากเกินไป คุณสามารถลดความยุ่งเหยิงได้โดยการแสดงเส้นทางอื่นให้น้อยกว่าค่าเริ่มต้น (2 เส้นทาง) หรือไม่แสดงเส้นทางอื่นเลย คุณกำหนดค่าตัวเลือกนี้ได้ก่อนที่จะดึงข้อมูลเส้นทางด้วยการเรียกใช้เมธอด RoutingOptions.alternateRoutesStrategy() ด้วยค่าการแจกแจงค่าใดค่าหนึ่งต่อไปนี้

ค่าการแจงนับคำอธิบาย
AlternateRoutesStrategy.SHOW_ALL ค่าเริ่มต้น แสดงเส้นทางเลือกได้สูงสุด 2 เส้นทาง
AlternateRoutesStrategy.SHOW_ONE แสดงเส้นทางสำรอง 1 เส้นทาง (ถ้ามี)
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);