เมื่อใช้ Navigation SDK สำหรับ Android คุณสามารถแก้ไขประสบการณ์ของผู้ใช้ในแผนที่ของคุณ โดยการระบุตัวควบคุม UI ในตัวและองค์ประกอบที่จะปรากฏบนแผนที่ คุณยังปรับลักษณะที่ปรากฏของ UI การนำทางได้อีกด้วย ดูคำแนะนำเกี่ยวกับการแก้ไขที่ยอมรับได้ใน UI การนำทางที่หน้านโยบาย
เอกสารนี้อธิบายวิธีการแก้ไขอินเทอร์เฟซผู้ใช้ของแผนที่ได้ 2 วิธี ดังนี้
ตัวควบคุม UI ของแผนที่
ตัวควบคุม UI แผนที่อยู่ด้านบนของมุมมองการนำทาง SDK การนำทางสำหรับ Android เปลี่ยนตำแหน่งการควบคุมที่กำหนดเองโดยอัตโนมัติเมื่อเลย์เอาต์ในตัวเปลี่ยนแปลง คุณสามารถกำหนดการควบคุมที่กำหนดเองได้ 1 รายการสำหรับแต่ละตำแหน่งของเลย์เอาต์ การควบคุมที่กำหนดเองอาจเป็นองค์ประกอบ UI 1 รายการ หรือหากต้องการการออกแบบมากกว่าก็ใช้ ViewGroup
กับองค์ประกอบ UI หลายรายการได้
เมธอด setCustomControl
จะระบุตำแหน่งตามที่ระบุไว้ใน CustomControlPosition
enum ดังนี้
SECONDARY_HEADER
(ปรากฏในโหมดแนวตั้งเท่านั้น)BOTTOM_START_BELOW
BOTTOM_END_BELOW
เช่น รูปภาพด้านล่างแสดงตัวอย่างตำแหน่งต่างๆ ของตัวควบคุม UI ที่แจ้งให้ผู้ขับขี่รถร่วมเดินทางทราบตำแหน่งของผู้โดยสาร
เพิ่มส่วนหัวรองที่กำหนดเอง
โดยค่าเริ่มต้น เลย์เอาต์หน้าจอในโหมดการนำทางจะระบุตำแหน่งให้ส่วนหัวรองที่อยู่ใต้ส่วนหัวหลัก ส่วนหัวรองนี้จะปรากฏขึ้นเมื่อจำเป็น เช่น เมื่อมีคำแนะนำช่องทาง แอปของคุณสามารถใช้ตำแหน่งส่วนหัวระดับรอง ของเลย์เอาต์สำหรับเนื้อหาที่กำหนดเอง เมื่อใช้ฟีเจอร์นี้ การควบคุมของคุณจะครอบคลุมเนื้อหาส่วนหัวรองเริ่มต้นทั้งหมด หากมุมมองการนำทางมีพื้นหลัง พื้นหลังนั้นจะยังคงอยู่ที่ส่วนหัวสำรอง เมื่อแอปนำการควบคุมที่กำหนดเองออก ส่วนหัวรองเริ่มต้นจะปรากฏขึ้นแทน
ตำแหน่งส่วนหัวรองที่กำหนดเองจะปรับแนวขอบด้านบนให้ตรงกับขอบด้านล่างของส่วนหัวหลัก รองรับตำแหน่งนี้เฉพาะใน portrait mode
ใน landscape mode
ส่วนหัวรองจะไม่พร้อมใช้งานและเลย์เอาต์จะไม่เปลี่ยนแปลง
- สร้าง Android View ที่มีองค์ประกอบ UI ที่กำหนดเองหรือ ViewGroup
- ทำให้ XML เพิ่มขึ้นหรือสร้างอินสแตนซ์มุมมองที่กำหนดเองเพื่อรับอินสแตนซ์ของข้อมูลพร็อพเพอร์ตี้ที่จะเพิ่มเป็นส่วนหัวรอง
ใช้
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 จะขยับขึ้นเพื่อให้พอดีกับปุ่มดังกล่าว
- สร้างมุมมอง Android ที่มีองค์ประกอบ UI หรือกลุ่มมุมมองที่ต้องการเพิ่ม
- สร้างส่วนย่อยหรือมุมมองการนำทาง
- เรียกใช้เมธอด
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 แผนที่
Navigation SDK สำหรับ Android มีอุปกรณ์เสริม UI ที่ปรากฏระหว่างการนำทางในลักษณะเดียวกับที่พบในแอปพลิเคชัน Google Maps สำหรับ Android คุณปรับระดับการมองเห็นหรือลักษณะการมองเห็นของการควบคุมเหล่านี้ได้ตามที่อธิบายไว้ในส่วนนี้ การเปลี่ยนแปลงที่คุณทำที่นี่จะแสดงให้เห็นในระหว่าง เซสชันการนำทางถัดไป
ดูหลักเกณฑ์เกี่ยวกับการแก้ไข UI การนำทางที่ยอมรับได้ในหน้านโยบาย
ดูโค้ด
แก้ไขส่วนหัวของการนำทาง
ใช้
SupportNavigationFragment.setStylingOptions()
หรือ
NavigationView.setStylingOptions()
เพื่อเปลี่ยนธีมของส่วนหัวของการนำทางและสัญญาณบอกสถานะจุดเลี้ยวถัดไปที่ปรากฏใต้ส่วนหัวหากมี
คุณสามารถตั้งค่าแอตทริบิวต์ต่อไปนี้ได้
ประเภทแอตทริบิวต์ | Attributes |
---|---|
สีพื้นหลัง |
|
องค์ประกอบของข้อความสําหรับวิธีการ |
|
องค์ประกอบของข้อความสำหรับขั้นตอนถัดไป |
|
ไอคอนวิธีการจัดวาง |
|
คำแนะนำช่องทาง |
|
ตัวอย่างต่อไปนี้แสดงวิธีตั้งค่าตัวเลือกการจัดรูปแบบ
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 แผนที่ ฟีเจอร์นี้ช่วยให้ผู้ใช้เปิดการแสดงไฟจราจรหรือไอคอนป้ายหยุดตลอดเส้นทางได้ ซึ่งจะให้บริบทที่ชัดเจนขึ้นเพื่อให้การเดินทางมีประสิทธิภาพและแม่นยำมากขึ้น
โดยค่าเริ่มต้น ไฟจราจรและป้ายหยุดจะปิดใช้ใน
API การนำทาง หากต้องการเปิดใช้ฟีเจอร์นี้ ให้เรียกใช้ DisplayOptions
สำหรับแต่ละฟีเจอร์แยกกัน
DisplayOptions displayOptions =
new DisplayOptions().showTrafficLights(true).showStopSigns(true);
เพิ่มเครื่องหมายที่กำหนดเอง
ขณะนี้ Navigation SDK สำหรับ Android ใช้ Google Maps API สำหรับเครื่องหมาย ไปที่เอกสารประกอบ Maps API เพื่อดูข้อมูลเพิ่มเติม
ข้อความแบบลอย
คุณสามารถเพิ่มข้อความแบบลอยที่ตำแหน่งใดก็ได้ในแอป ในกรณีที่ข้อความไม่บดบังการระบุแหล่งที่มาของ Google Navigation SDK ไม่สนับสนุนการตรึงข้อความไว้ในละติจูด/ลองจิจูดบนแผนที่หรือบนป้ายกำกับ ไปที่หน้าต่างข้อมูลเพื่อดูข้อมูลเพิ่มเติม
แสดงขีดจำกัดความเร็ว
คุณจะแสดงหรือซ่อนไอคอนขีดจำกัดความเร็วแบบเป็นโปรแกรมได้ ใช้
NavigationView.setSpeedLimitIconEnabled()
หรือ
SupportNavigationFragment.setSpeedLimitIconEnabled()
เพื่อแสดงหรือซ่อนไอคอนการจำกัดความเร็ว เมื่อเปิดใช้ ไอคอนขีดจำกัดความเร็ว
จะปรากฏที่มุมด้านล่างระหว่างการนำทาง ไอคอนจะแสดงขีดจำกัดความเร็ว
ของถนนที่รถใช้สัญจร ไอคอนนี้จะปรากฏในตำแหน่ง
ที่มีข้อมูลขีดจำกัดความเร็วที่เชื่อถือได้เท่านั้น
// Display the Speed Limit icon
mNavFragment.setSpeedLimitIconEnabled(true);
ไอคอนจำกัดความเร็วจะซ่อนไว้ชั่วคราวเมื่อปุ่มปรับให้ใหม่ปรากฏ
ตั้งค่าโหมดกลางคืน
คุณจะควบคุมลักษณะการทำงานของโหมดกลางคืนได้แบบเป็นโปรแกรม ใช้
NavigationView.setForceNightMode()
หรือ
SupportNavigationFragment.setForceNightMode()
เปิดหรือปิดโหมดกลางคืน หรือให้การนำทาง 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 | ค่าเริ่มต้น แสดงเส้นทางเลือกได้สูงสุด 2 เส้นทาง |
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);