แสดงเนื้อหาแบบเต็มหน้าจอในมุมมอง

ลองใช้วิธีแบบ Compose
Jetpack Compose เป็นชุดเครื่องมือ UI ที่แนะนำสำหรับ Android ดูวิธีทำงานกับแบบไร้ขอบใน Compose

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

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

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

รูปที่ 1 แถบระบบในเลย์เอาต์แบบขอบจรดขอบ

เมื่อใช้เลย์เอาต์แบบไร้ขอบในแอป โปรดคำนึงถึงสิ่งต่อไปนี้

  1. เปิดใช้การแสดงผลแบบไร้ขอบ
  2. ใช้เลย์เอาต์แบบปรับเปลี่ยนได้เพื่อเพิ่มประสิทธิภาพประสบการณ์ของผู้ใช้ในอุปกรณ์รูปแบบต่างๆ
  3. จัดการภาพที่ซ้อนทับกัน
  4. พิจารณาแสดงแถบสีหลังแถบระบบ
ตัวอย่างภาพที่อยู่ด้านหลังแถบสถานะ
รูปที่ 2 ตัวอย่างภาพที่อยู่ด้านหลังแถบสถานะ

เปิดใช้การแสดงผลแบบไร้ขอบ

หากแอปกำหนดเป้าหมายเป็น SDK 35 ขึ้นไป ระบบจะเปิดใช้การแสดงผลแบบไร้ขอบโดยอัตโนมัติสำหรับอุปกรณ์ Android 15 ขึ้นไป

หากต้องการเปิดใช้การแสดงผลแบบเต็มหน้าจอใน Android เวอร์ชันก่อนหน้า ให้เรียกใช้ enableEdgeToEdge ด้วยตนเองใน onCreate ของ Activity

Kotlin

 override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         WindowCompat.enableEdgeToEdge(window)
        ...
      }

Java

 @Override
      protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        WindowCompat.enableEdgeToEdge(getWindow());
        ...
      }

โดยค่าเริ่มต้น enableEdgeToEdge() จะทำให้แถบระบบโปร่งใส ยกเว้นในโหมดการไปยังส่วนต่างๆ แบบ 3 ปุ่มที่แถบนำทางจะมีเลเยอร์โปร่งแสง สีของไอคอนระบบและม่านจะปรับตามธีมสว่างหรือธีมมืดของระบบ

หากต้องการเปิดใช้การแสดงผลแบบไร้ขอบในแอปโดยไม่ต้องใช้ฟังก์ชัน enableEdgeToEdge() โปรดดูหัวข้อตั้งค่าการแสดงผลแบบไร้ขอบด้วยตนเอง

จัดการการซ้อนทับโดยใช้ส่วนแทรก

มุมมองบางส่วนของแอปอาจแสดงอยู่ด้านหลังแถบระบบ ดังที่แสดงในรูปที่ 3

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

ประเภทของส่วนแทรกที่ใช้กับการแสดงแอปแบบไร้ขอบมีดังนี้

  • ส่วนแทรกแถบระบบ: เหมาะที่สุดสำหรับมุมมองที่แตะได้และต้องไม่ถูกแถบระบบบดบัง

  • ส่วนแทรกของหน้าจอรอยบาก: สำหรับพื้นที่ที่อาจมีรอยบากบนหน้าจอเนื่องจากรูปร่างของอุปกรณ์

  • ส่วนแทรกท่าทางสัมผัสของระบบ: สำหรับพื้นที่การไปยังส่วนต่างๆ ด้วยท่าทางสัมผัสที่ระบบใช้ซึ่งมีความสำคัญเหนือกว่าแอปของคุณ

ส่วนที่เว้นไว้สำหรับแถบระบบ

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

ตัวอย่างเช่น ปุ่มการทำงานแบบลอย (FAB) ในรูปที่ 3 ถูกแถบการนำทางบดบังบางส่วน

ตัวอย่างการติดตั้งใช้งานแบบไร้ขอบ แต่แถบการนำทางบดบัง FAB
รูปที่ 3 แถบนำทางซ้อนทับ FAB ในเลย์เอาต์แบบไร้ขอบ

เพื่อหลีกเลี่ยงการทับซ้อนกันของภาพในโหมดท่าทางสัมผัสหรือโหมดปุ่ม คุณสามารถเพิ่มระยะขอบของมุมมองได้โดยใช้ getInsets(int) กับ WindowInsetsCompat.Type.systemBars()

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีใช้ส่วนแทรกแถบระบบ

Kotlin

ViewCompat.setOnApplyWindowInsetsListener(fab) { v, windowInsets ->
  val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
  // Apply the insets as a margin to the view. This solution sets
  // only the bottom, left, and right dimensions, but you can apply whichever
  // insets are appropriate to your layout. You can also update the view padding
  // if that's more appropriate.
  v.updateLayoutParams<MarginLayoutParams> {
      leftMargin = insets.left
      bottomMargin = insets.bottom
      rightMargin = insets.right
  }

  // Return CONSUMED if you don't want the window insets to keep passing
  // down to descendant views.
  WindowInsetsCompat.CONSUMED
}

Java

ViewCompat.setOnApplyWindowInsetsListener(fab, (v, windowInsets) -> {
  Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
  // Apply the insets as a margin to the view. This solution sets only the
  // bottom, left, and right dimensions, but you can apply whichever insets are
  // appropriate to your layout. You can also update the view padding if that's
  // more appropriate.
  MarginLayoutParams mlp = (MarginLayoutParams) v.getLayoutParams();
  mlp.leftMargin = insets.left;
  mlp.bottomMargin = insets.bottom;
  mlp.rightMargin = insets.right;
  v.setLayoutParams(mlp);

  // Return CONSUMED if you don't want the window insets to keep passing
  // down to descendant views.
    return WindowInsetsCompat.CONSUMED;
});

หากคุณใช้โซลูชันนี้กับตัวอย่างที่แสดงในรูปที่ 3 จะส่งผลให้ไม่มีการซ้อนทับกันในโหมดปุ่ม ดังที่แสดงในรูปที่ 4

แถบนำทางแบบโปร่งแสงที่ไม่บดบัง FAB
รูปที่ 4 การแก้ไขการซ้อนทับกันของภาพในโหมดปุ่ม

เช่นเดียวกับโหมดการไปยังส่วนต่างๆ ด้วยท่าทางสัมผัส ดังที่แสดงในรูปที่ 5

แบบไร้ขอบพร้อมการไปยังส่วนต่างๆ ด้วยท่าทางสัมผัส
รูปที่ 5 การแก้ไขการซ้อนทับกันของภาพในโหมดการไปยังส่วนต่างๆ ด้วยท่าทางสัมผัส

ส่วนแทรกของหน้าจอรอยบาก

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

ตัวอย่างเช่น หน้าจอแอปจำนวนมากจะแสดงรายการต่างๆ อย่าบดบังรายการในลิสต์ด้วยหน้าจอรอยบากหรือแถบระบบ

Kotlin

ViewCompat.setOnApplyWindowInsetsListener(binding.recyclerView) { v, insets ->
  val bars = insets.getInsets(
    WindowInsetsCompat.Type.systemBars()
      or WindowInsetsCompat.Type.displayCutout()
  )
  v.updatePadding(
    left = bars.left,
    top = bars.top,
    right = bars.right,
    bottom = bars.bottom,
  )
  WindowInsetsCompat.CONSUMED
}

Java

ViewCompat.setOnApplyWindowInsetsListener(mBinding.recyclerView, (v, insets) -> {
  Insets bars = insets.getInsets(
    WindowInsetsCompat.Type.systemBars()
    | WindowInsetsCompat.Type.displayCutout()
  );
  v.setPadding(bars.left, bars.top, bars.right, bars.bottom);
  return WindowInsetsCompat.CONSUMED;
});

กำหนดค่าของ WindowInsetsCompat โดยใช้ or เชิงตรรกะของแถบระบบและประเภทหน้าจอรอยบาก

ตั้งค่า clipToPadding เป็น RecyclerView เพื่อให้ระยะห่างจากขอบเลื่อนไปพร้อมกับรายการในลิสต์ ซึ่งจะช่วยให้รายการต่างๆ อยู่ด้านหลังแถบระบบเมื่อผู้ใช้เลื่อน ดังที่แสดงในตัวอย่างต่อไปนี้

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="false"
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />

ส่วนแทรกท่าทางสัมผัสของระบบ

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

ตัวอย่างส่วนแทรกของท่าทางสัมผัสของระบบ
รูปที่ 6 ส่วนแทรกท่าทางสัมผัสของระบบ

เช่นเดียวกับส่วนแทรกแถบระบบ คุณสามารถหลีกเลี่ยงการทับซ้อนส่วนแทรกท่าทางสัมผัสของระบบได้โดยใช้ getInsets(int) กับ WindowInsetsCompat.Type.systemGestures()

ใช้อินเซ็ตเหล่านี้เพื่อย้ายหรือเพิ่มระยะห่างจากขอบของมุมมองที่ปัดได้ กรณีการใช้งานที่พบบ่อย ได้แก่ Bottom Sheet, การปัดในเกม และภาพสไลด์ที่ใช้ ViewPager2

ใน Android 10 ขึ้นไป ส่วนที่เว้นไว้สำหรับท่าทางสัมผัสของระบบจะมีส่วนที่เว้นไว้ด้านล่างสำหรับท่าทางสัมผัสเพื่อไปยังหน้าแรก และส่วนที่เว้นไว้ด้านซ้ายและขวาสำหรับท่าทางสัมผัสเพื่อย้อนกลับ

ตัวอย่างการวัดค่าส่วนแทรกของท่าทางสัมผัสของระบบ
รูปที่ 7 การวัดค่าส่วนแทรกของท่าทางสัมผัสของระบบ

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีใช้ส่วนแทรกท่าทางสัมผัสของระบบ

Kotlin

ViewCompat.setOnApplyWindowInsetsListener(view) { view, windowInsets ->
    val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemGestures())
    // Apply the insets as padding to the view. Here, set all the dimensions
    // as appropriate to your layout. You can also update the view's margin if
    // more appropriate.
    view.updatePadding(insets.left, insets.top, insets.right, insets.bottom)

    // Return CONSUMED if you don't want the window insets to keep passing down
    // to descendant views.
    WindowInsetsCompat.CONSUMED
}

Java

ViewCompat.setOnApplyWindowInsetsListener(view, (v, windowInsets) -> {
    Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemGestures());
    // Apply the insets as padding to the view. Here, set all the dimensions
    // as appropriate to your layout. You can also update the view's margin if
    // more appropriate.
    view.setPadding(insets.left, insets.top, insets.right, insets.bottom);

    // Return CONSUMED if you don't want the window insets to keep passing down
    // to descendant views.
    return WindowInsetsCompat.CONSUMED;
});

องค์ประกอบของ Material

คอมโพเนนต์ Material ของ Android (com.google.android.material) ที่อิงตามมุมมองจำนวนมากจะจัดการส่วนแทรกโดยอัตโนมัติ ซึ่งรวมถึง BottomAppBar, BottomNavigationView, NavigationRailView และ NavigationView

อย่างไรก็ตาม AppBarLayout จะไม่จัดการส่วนแทรกโดยอัตโนมัติ เพิ่ม android:fitsSystemWindows="true" เพื่อจัดการส่วนแทรกด้านบน

อ่านวิธีจัดการส่วนแทรกด้วยคอมโพเนนต์ Material ใน Compose

การส่งเอกสารแทรกที่เข้ากันได้แบบย้อนหลัง

หากต้องการหยุดการส่งส่วนแทรกไปยังมุมมองย่อยและหลีกเลี่ยงการเว้นระยะห่างจากขอบมากเกินไป คุณสามารถใช้ส่วนแทรกโดยใช้ค่าคงที่ WindowInsetsCompat.CONSUMED อย่างไรก็ตาม ในอุปกรณ์ที่ใช้ Android 10 (ระดับ API 29 และต่ำกว่า) ระบบจะไม่ส่งส่วนแทรกไปยังระดับเดียวกันหลังจากเรียกใช้ WindowInsetsCompat.CONSUMED ซึ่งอาจทำให้เกิดการซ้อนทับกันโดยไม่ตั้งใจ

ตัวอย่างการส่งแทรกที่ใช้งานไม่ได้
รูปที่ 8 ตัวอย่างการส่งข้อมูลส่วนแทรกที่ใช้งานไม่ได้ ส่วนที่เว้นไว้จะไม่ส่งไปยังมุมมองระดับเดียวกันหลังจาก ViewGroup 1 ใช้ส่วนที่เว้นไว้ใน Android 10 (ระดับ API 29) และเวอร์ชันก่อนหน้า ซึ่งทำให้ TextView 2 ซ้อนทับกับแถบนำทางของระบบ อย่างไรก็ตาม ระบบจะส่งส่วนแทรกไปยังมุมมองข้างเคียงใน Android 11 (ระดับ API 30) ขึ้นไปตามที่คาดไว้

หากต้องการยืนยันว่ามีการส่งส่วนแทรกไปยังพี่น้องสำหรับ Android เวอร์ชันที่รองรับทั้งหมด ให้ใช้ ViewGroupCompat#installCompatInsetsDispatch ก่อนใช้ส่วนแทรก ซึ่งพร้อมใช้งานใน AndroidX Core และ Core-ktx 1.16.0-alpha01 ขึ้นไป

Kotlin

// Use the i.d. assigned to your layout's root view, e.g. R.id.main
val rootView = findViewById(R.id.main)
// Call before consuming insets
ViewGroupCompat.installCompatInsetsDispatch(rootView)

Java

// Use the i.d. assigned to your layout's root view, e.g. R.id.main
LinearLayout rootView = findViewById(R.id.main);
// Call before consuming insets
ViewGroupCompat.installCompatInsetsDispatch(rootView);
ตัวอย่างการส่งการแทรกแบบคงที่
รูปที่ 9 แก้ไขการส่งส่วนแทรกหลังจากเรียกใช้ ViewGroupCompat#installCompatInsetsDispatch

โหมดใหญ่พิเศษ

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

Kotlin

val windowInsetsController =
      WindowCompat.getInsetsController(window, window.decorView)

// Hide the system bars.
windowInsetsController.hide(Type.systemBars())

// Show the system bars.
windowInsetsController.show(Type.systemBars())

Java

Window window = getWindow();
WindowInsetsControllerCompat windowInsetsController =
      WindowCompat.getInsetsController(window, window.getDecorView());
if (windowInsetsController == null) {
    return;
  }
// Hide the system bars.
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars());

// Show the system bars.
windowInsetsController.show(WindowInsetsCompat.Type.systemBars());

ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ฟีเจอร์นี้ได้ที่หัวข้อซ่อนแถบระบบสำหรับโหมดใหญ่พิเศษ

ไอคอนแถบระบบ

การเรียกใช้ enableEdgeToEdge จะช่วยให้มั่นใจว่าสีของไอคอนแถบระบบจะอัปเดตเมื่อธีมของอุปกรณ์เปลี่ยนไป

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

Kotlin

WindowCompat.getInsetsController(window, window.decorView)
    .isAppearanceLightStatusBars = false

Java

WindowCompat.getInsetsController(window, window.getDecorView())
    .setAppearanceLightStatusBars(false);

การปกป้องแถบระบบ

เมื่อแอปกำหนดเป้าหมายเป็น SDK 35 ขึ้นไป ระบบจะบังคับใช้การแสดงผลแบบไร้ขอบ แถบสถานะของระบบและการไปยังส่วนต่างๆ ด้วยท่าทางสัมผัสจะโปร่งใส แต่แถบนำทางแบบ 3 ปุ่มจะโปร่งแสง เรียกใช้ enableEdgeToEdge เพื่อให้เข้ากันได้แบบย้อนหลัง

อย่างไรก็ตาม ค่าเริ่มต้นของระบบอาจใช้ไม่ได้กับบาง Use Case โปรดดูคำแนะนำการออกแบบแถบระบบของ Android และการออกแบบแบบไร้ขอบเพื่อพิจารณาว่าจะใช้แถบระบบแบบโปร่งใสหรือโปร่งแสง

สร้างแถบระบบแบบโปร่งใส

สร้างแถบสถานะแบบโปร่งใสโดยกำหนดเป้าหมายเป็น Android 15 (SDK 35) ขึ้นไป หรือโดยเรียกใช้ enableEdgeToEdge() ด้วยอาร์กิวเมนต์เริ่มต้นสำหรับเวอร์ชันก่อนหน้า

สร้างแถบนำทางด้วยท่าทางสัมผัสแบบโปร่งใสโดยกำหนดเป้าหมายเป็น Android 15 ขึ้นไป หรือ โดยเรียกใช้ enableEdgeToEdge() ด้วยอาร์กิวเมนต์เริ่มต้นสำหรับเวอร์ชันก่อนหน้า สำหรับ แถบนำทางแบบ 3 ปุ่ม ให้ตั้งค่า Window.setNavigationBarContrastEnforced เป็น false มิฉะนั้นระบบจะใช้เลเยอร์โปร่งแสง

สร้างแถบระบบแบบโปร่งแสง

หากต้องการสร้างแถบสถานะแบบโปร่งแสง ให้ทำดังนี้

  1. อัปเดตทรัพยากร Dependency ของ androidx-core เป็น 1.16.0-beta01 ขึ้นไป
  2. รวมเลย์เอาต์ XML ไว้ใน androidx.core.view.insets.ProtectionLayout และกำหนดรหัส
  3. เข้าถึง ProtectionLayout แบบเป็นโปรแกรมเพื่อตั้งค่าการป้องกัน โดยระบุฝั่งและ GradientProtection สำหรับแถบสถานะ

<androidx.core.view.insets.ProtectionLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_protection"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:id="@+id/item_list"
        android:clipToPadding="false"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!--items-->

    </ScrollView>

</androidx.core.view.insets.ProtectionLayout>

findViewById<ProtectionLayout>(R.id.list_protection)
    .setProtections(
        listOf(
            GradientProtection(
                WindowInsetsCompat.Side.TOP,
                // Ideally, this is the pane's background color
                paneBackgroundColor
            )
        )
    )

ตรวจสอบว่า ColorInt ที่ส่งไปยัง GradientProtection ตรงกับพื้นหลังของเนื้อหา ตัวอย่างเช่น เลย์เอาต์แบบรายละเอียดรายการที่แสดงบนอุปกรณ์แบบพับได้อาจมี GradientProtections ที่มีสีต่างกันสำหรับแผงรายการและแผงรายละเอียด

รูปที่ 1 การไล่ระดับสีที่แตกต่างกัน

อย่าสร้างแถบการไปยังส่วนต่างๆ ด้วยท่าทางสัมผัสแบบโปร่งแสง หากต้องการสร้างแถบนำทางแบบ 3 ปุ่มที่โปร่งแสง ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้

  • หากคุณรวมเลย์เอาต์ไว้ใน ProtectionView แล้ว คุณสามารถส่ง ColorProtection หรือ GradientProtection เพิ่มเติมไปยังเมธอด setProtections ได้ ก่อนดำเนินการดังกล่าว โปรดตรวจสอบว่า window.isNavigationBarContrastEnforced = false
  • มิเช่นนั้น ให้ตั้งค่า window.isNavigationBarContrastEnforced = true

เคล็ดลับอื่นๆ

เคล็ดลับเพิ่มเติมเมื่อจัดการกับส่วนแทรก

ทำให้เนื้อหาที่เลื่อนได้แสดงแบบไร้ขอบ

ตรวจสอบว่ารายการสุดท้ายในลิสต์ไม่ถูกบดบังโดยแถบระบบใน RecyclerView หรือ NestedScrollView โดยจัดการส่วนแทรกและตั้งค่า clipToPadding เป็น false

วิดีโอต่อไปนี้แสดง RecyclerView ที่ปิดใช้การแสดงผลแบบไร้ขอบ (ซ้าย) และเปิดใช้ (ขวา)

ดูข้อมูลโค้ดในส่วนสร้างรายการแบบไดนามิกด้วย RecyclerView เพื่อดูตัวอย่างโค้ด

ทำให้กล่องโต้ตอบแบบเต็มหน้าจอแสดงผลแบบไร้ขอบ

หากต้องการทำให้กล่องโต้ตอบแบบเต็มหน้าจอแสดงผลแบบไร้ขอบ ให้เรียกใช้ enableEdgeToEdge ในกล่องโต้ตอบ

Kotlin

class MyAlertDialogFragment : DialogFragment() {
    override fun onStart(){
        super.onStart()
        dialog?.window?.let { WindowCompat.enableEdgeToEdge(it) }
    }
    ...
}

Java

public class MyAlertDialogFragment extends DialogFragment {
    @Override
    public void onStart() {
        super.onStart();
        Dialog dialog = getDialog();
        if (dialog != null) {
            Window window = dialog.getWindow();
            if (window != null) {
                WindowCompat.enableEdgeToEdge(window);
            }
        }
    }
    ...
}

แหล่งข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับการแสดงผลแบบไร้ขอบได้ที่ข้อมูลอ้างอิงต่อไปนี้

บล็อก

การออกแบบ

เอกสารประกอบอื่นๆ

วิดีโอ