ตัวอย่างนี้สาธิตวิธี ควบคุมตำแหน่งการแสดง Dialog ให้อยู่ที่ตำแหน่งที่ต้องการบนหน้าจอ เช่น ด้านล่าง กลาง ขวา ซ้าย โดยใช้ Window.setGravity()
ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่
Android Studio → New Project → Empty Activity
ขั้นตอนที่ 2: Layout (activity_main.xml)
Layout ว่างเปล่า เพราะ Dialog จะสร้างจากโค้ด
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
</RelativeLayout>
ขั้นตอนที่ 3: โค้ดหลัก (MainActivity.kt)
import android.os.Bundle
import android.view.Gravity
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "Dialog Position Demo"
val builder = AlertDialog.Builder(this).apply {
setTitle("Alert Dialog")
setMessage("Have a nice day!")
setCancelable(false)
setPositiveButton("OK") { _, _ -> }
setNegativeButton("Cancel") { _, _ -> }
}
val alertDialog = builder.create()
alertDialog.show()
// 🔑 จุดสำคัญ: ตั้งค่า Gravity หลัง show() เท่านั้น
alertDialog.window?.setGravity(Gravity.BOTTOM)
/* ตัวเลือก Gravity อื่นๆ:
* Gravity.TOP - บนสุด
* Gravity.CENTER - กลาง (ค่าเริ่มต้น)
* Gravity.BOTTOM - ล่างสุด
* Gravity.START / LEFT - ซ้าย
* Gravity.END / RIGHT - ขวา
* Gravity.TOP or Gravity.START - มุมซ้ายบน
* Gravity.BOTTOM or Gravity.END - มุมขวาล่าง
* รวมได้ด้วย: Gravity.BOTTOM or Gravity.END
*/
}
}
ขั้นตอนที่ 4: AndroidManifest.xml
Manifest มาตรฐาน
💡 เคล็ดลับเพิ่มเติม
- ต้องเรียก
setGravity()หลังจากshow()เท่านั้น จะมีผล - สามารถปรับ Margin ได้ด้วย
window?.setDimAmount(0.5f)สำหรับพื้นหลังมืด - สำหรับ Custom Layout ใช้
dialog.setContentView(R.layout.custom_dialog)ก่อนshow() - ใช้
WindowManager.LayoutParamsสำหรับควบคุมขนาด/ตำแหน่งละเอียดกว่า
ทดสอบ
รันแอป → Dialog จะแสดงขึ้นมาที่ ด้านล่างหน้าจอ แทนที่จะอยู่กลาง