ตั้งค่าการแสดงผลแบบไร้ขอบด้วยตนเอง

การเรียกใช้ enableEdgeToEdge จะห่อหุ้มตรรกะที่จำเป็นเพื่อให้เข้ากันได้แบบย้อนหลังอย่างแท้จริง จึงเป็นวิธีที่แนะนำในการตั้งค่าการแสดงผลแบบขอบจรดขอบ โปรดดูเอกสารประกอบของ Compose และ Views แทนคู่มือนี้เพื่อดูวิธีที่ทันสมัยในการแสดงผลแบบขอบจรดขอบโดยใช้ enableEdgeToEdge

แม้ว่าเราจะไม่แนะนำ แต่หากแอปต้องตั้งค่าการแสดงผลแบบขอบจรดขอบด้วยตนเอง คุณสามารถทำตามขั้นตอนต่อไปนี้

  1. โทร WindowCompat.setDecorFitsSystemWindows(window, false)
  2. ตั้งค่าแถบระบบให้โปร่งใส
  3. จัดการระยะขอบ

จัดวางแอปในโหมดเต็มหน้าจอ

ใช้ WindowCompat.setDecorFitsSystemWindows(window, false) เพื่อจัดวางแอปไว้ด้านหลังแถบระบบ ดังที่แสดงในตัวอย่างโค้ดต่อไปนี้

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  WindowCompat.setDecorFitsSystemWindows(window, false)
}

Java

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
}

เปลี่ยนสีของแถบระบบ

เมื่อสร้างเลย์เอาต์แบบขอบจรดขอบสำหรับ Android 14 และเวอร์ชันเก่ากว่าด้วยตนเอง แอปของคุณ ต้องทำให้แถบระบบโปร่งใสด้วย

คุณสามารถแก้ไขไฟล์ themes.xml เพื่อตั้งค่าสีของแถบสถานะและการนำทาง ให้โปร่งใส และเปลี่ยนสีไอคอนแถบสถานะได้

<!-- values-v29/themes.xml -->
<style name="Theme.MyApp">
  <item name="android:navigationBarColor">
     @android:color/transparent
  </item>

  <!-- Optional: set to transparent if your app is drawing behind the status bar. -->
  <item name="android:statusBarColor">
     @android:color/transparent
  </item>

  <!-- Optional: set for a light status bar with dark content. -->
  <item name="android:windowLightStatusBar">
    true
  </item>
</style>

คุณสามารถใช้ WindowInsetsControllerCompat API แทน theme.xml เพื่อควบคุมสีเนื้อหาของแถบสถานะได้ โดยใช้ฟังก์ชัน setAppearanceLightNavigationBars() และส่ง true เพื่อเปลี่ยนสีพื้นหน้าของการนำทางเป็น สีอ่อน หรือ false เพื่อเปลี่ยนกลับเป็นสีเริ่มต้น

Kotlin

val windowInsetsController =
      ViewCompat.getWindowInsetsController(window.decorView)

windowInsetsController?.isAppearanceLightNavigationBars = true

Java

WindowInsetsControllerCompat windowInsetsController =
      ViewCompat.getWindowInsetsController(getWindow().getDecorView());
if (windowInsetsController == null) {
    return;
}

windowInsetsController.setAppearanceLightNavigationBars(true);

จัดการการแทรก

สุดท้าย แอปของคุณต้องจัดการ Inset เพื่อให้ UI ที่สำคัญหลีกเลี่ยง แถบระบบและรอยบากของจอแสดงผล โปรดดูเอกสารประกอบเขียนและมุมมอง เพื่อดูวิธีจัดการภาพแทรก