Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

Android에서 다이얼로그(Dialog) 화면 위치 변경하는 방법 완벽 가이드

Android 앱을 개발하다 보면 기본적으로 화면 중앙에 표시되는 다이얼로그(Dialog)의 위치를 조정해야 하는 경우가 있습니다. 예를 들어 알림 메시지를 화면 하단에 띄우고 싶거나, 특정 위치에 맞춰 UI를 구성하고 싶을 때가 그렇습니다.

이 글에서는 AlertDialogsetGravity() 메서드를 활용해 다이얼로그를 화면 원하는 위치에 표시하는 방법을 단계별로 살펴보겠습니다.

핵심 개념: Window Gravity 설정

다이얼로그의 위치를 변경하는 핵심은 alertDialog.getWindow().setGravity()입니다. Gravity.BOTTOM, Gravity.TOP, Gravity.CENTER 등의 상수를 사용해 다이얼로그가 표시될 위치를 지정할 수 있습니다.

Step 1 — 새 프로젝트 생성

Android Studio를 실행하고 File → New Project로 이동한 후, 필요한 정보를 모두 입력하여 새 프로젝트를 생성합니다.

Step 2 — activity_main.xml 작성

res/layout/activity_main.xml 파일에 아래 코드를 추가합니다. 이 예제에서는 빈 RelativeLayout만 사용합니다.

<?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>

Step 3 — MainActivity.java 작성

src/MainActivity.java 파일에 아래 코드를 추가합니다. 여기서 다이얼로그를 생성한 뒤 show() 호출 이후에 setGravity(Gravity.BOTTOM)을 적용하는 것이 중요합니다.

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Alert Dialog");
        builder.setMessage("Have a nice day!");
        builder.setCancelable(false);
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        });

        final AlertDialog alertDialog = builder.create();
        alertDialog.show();
        alertDialog.getWindow().setGravity(Gravity.BOTTOM);
    }
}

코드 포인트 정리

  • builder.setCancelable(false): 다이얼로그 바깥 영역을 눌러도 닫히지 않도록 설정합니다.
  • alertDialog.show() 이후 setGravity 호출: Window 객체가 생성된 후에야 gravity를 적용할 수 있으므로 반드시 show() 뒤에 호출해야 합니다.
  • Gravity 옵션: BOTTOM 외에 TOP, CENTER_HORIZONTAL 등 다양한 값으로 위치를 자유롭게 지정할 수 있습니다.

Step 4 — AndroidManifest.xml 확인

androidManifest.xml에는 별도의 권한 추가 없이 기본 설정 그대로 사용하면 됩니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

앱 실행 및 결과 확인

실제 Android 기기를 컴퓨터에 연결한 상태라고 가정하고 진행합니다. Android Studio에서 프로젝트의 액티비티 파일을 연 뒤 툴바의 Run(실행) 버튼을 클릭하세요. 실행 기기 목록에서 자신의 모바일 기기를 선택하면, 앱이 실행되면서 다이얼로그가 화면 하단에 표시되는 것을 확인할 수 있습니다.

Android에서 다이얼로그(Dialog) 화면 위치 변경하는 방법 완벽 가이드

마무리

이처럼 getWindow().setGravity() 한 줄만으로도 다이얼로그의 표시 위치를 손쉽게 변경할 수 있습니다. 커스텀 다이얼로그나 Bottom Sheet 스타일의 UI를 구현할 때도 같은 원리를 응용할 수 있으니, 다양한 Gravity 값을 실험해 보시기 바랍니다.