Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีเปลี่ยนตำแหน่ง Dialog บนหน้าจอ Android ด้วย Kotlin

ตัวอย่างนี้สาธิตวิธี ควบคุมตำแหน่งการแสดง 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 จะแสดงขึ้นมาที่ ด้านล่างหน้าจอ แทนที่จะอยู่กลาง