이 페이지에서

Android에서 Qt를 사용하여 스플래시 화면 구현하기

Android용 Qt를 사용하여 스플래시 화면을 설정하는 방법을 소개합니다.

초록색 배경에 Qt Development 로고가 있는 안드로이드 스플래시 화면

이 예제는 Qt를 사용하여 스플래시 화면을 표시하는 한 가지 방법을 보여주는 간단한 예제입니다. 앱이 시작되면 로고와 배경색이 포함된 Qt 스플래시 화면이 2초 동안 표시됩니다. 그런 다음 Qt 스플래시 화면이 페이드 아웃되며 앱의 메인 뷰가 나타납니다. 메인 뷰는 간단한 레이블과 닫기 버튼으로 구성되어 있습니다.

이 예제에서는 (Android 12부터 도입된) Android 기본 스플래시 화면이 숨겨져 있습니다.

이 예제는 스플래시 화면을 보여주는 두 가지 유사한 예제 중 하나입니다. 이 예제는 AndroidManifest 플래그를 사용하고, 다른 예제는 QML 뷰를 사용합니다.

Android에서 Qt 스플래시 화면 사용하기

Android용 Qt 스플래시 화면은 AndroidManifest.xml에 정의됩니다. Android 프로젝트 파일은 수동으로 만들거나 Qt Creator 템플릿 생성기를 사용하여 만들 수 있습니다. Qt Creator 템플릿 생성기를 사용하여 Android 프로젝트 파일을 만들려면:

  1. 다음으로 이동합니다 Projects
  2. ' Build Steps ' 하위 섹션으로 이동
  3. 열기 Build Android APK
  4. Application 하위 섹션에서 Create Templates 을 선택합니다
            <meta-data android:name="android.app.splash_screen_drawable"
                android:resource="@drawable/qtsplashscreen"/>
            <meta-data android:name="android.app.splash_screen_sticky"
                android:value="true"/>

이전 코드 조각에서:

Android 12부터는 Android에 기본 스플래시 화면이 있습니다. 애플리케이션이 실행될 때, 애플리케이션의 첫 번째 뷰가 표시되기 전에 기본 스플래시 화면이 나타납니다. 이를 수정하는 방법과 API가 제공됩니다. Android 스플래시 화면을 참조하십시오.
기본적으로 Android는 스플래시 화면으로 애플리케이션 아이콘을 사용합니다. Qt 애플리케이션에서는 이를 그대로 사용하거나, 애플리케이션 스플래시 화면으로 사용하도록 수정하거나, Qt 스플래시 화면과 결합하여 사용할 수 있습니다. 플랫폼 간 실행 사용자 경험을 일관되게 유지하려면 Android 스플래시 화면을 숨겨야 할 수도 있습니다. 이를 위해 Android 스플래시 화면을 효과적으로 숨기는 반투명 테마를 정의하십시오.

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <style name="splashStartTheme">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowDisablePreview">true</item>
        <item name="android:windowIsTranslucent">true</item>
    </style>
</resources>

하지만 한 가지 문제가 있습니다. 반투명 테마를 사용하면 화면 방향 변경이 작동하지 않습니다. 이는 Android 뷰가 밑에 있는 뷰로부터 방향을 가져오기 때문인데, 대개 이 뷰는 방향을 변경하지 않는 애플리케이션 드로어(Application Drawer)입니다. 또한 Activity 뷰가 설정된 후에는 테마를 변경할 수 없기 때문에, 결국 애플리케이션이 하나의 화면 방향에 고정된 상태로 머물게 됩니다.
이를 해결하기 위한 우회 방법으로, Android 스플래시 화면을 위한 반투명 테마를 적용한 일회용 Activity를 생성할 수 있습니다. 가능한 한 빨리, 애플리케이션에 필요한 모든 기능을 갖춘 다른 Activity를 실행합니다.

        <activity
            android:name=".SplashActivity"
            android:exported="true"
            android:theme="@style/splashStartTheme"
            android:noHistory="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

Qt 스플래시 화면을 실행하려면 Android Activity onCreate 를 오버라이드하고 Intent를 사용하여 QtActivity를 실행해야 합니다.

package io.qt.qtsplashscreeninandroid;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.util.Log;
import android.content.Intent;
import android.view.ViewTreeObserver;
import org.qtproject.qt.android.bindings.QtActivity;

public class SplashActivity extends Activity {

    private static final String TAG = "SplashActivity";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Set up an OnPreDrawListener to the root view.
        final View content = findViewById(android.R.id.content);
                content.getViewTreeObserver().addOnPreDrawListener(
                        new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                Intent intent = new Intent(SplashActivity.this, QtActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                startActivity(intent);

                content.getViewTreeObserver().removeOnPreDrawListener(this);
                finish();
                return true;
            }
        });
    }
}

이 예제에서 메인 뷰에는 종료 버튼이 있는 단일 뷰만 포함되어 있습니다.

import QtQuick
import QtQuick.Controls

Window {
    visible: true
    title: qsTr("Qt Splash Screen Example")
    color: "#2CDE85"

    Text {
        id: textLabel
        text: "First View"
        anchors.centerIn: parent
    }
    Button {
        id: closeButton
        anchors.horizontalCenter: parent.horizontalCenter
        anchors.top: textLabel.bottom
        anchors.topMargin: 5
        background: Rectangle {
            color: "#00414A"
            radius: 2
        }
        text: "Close"
        contentItem: Text {
            color: "#FFFFFF"
            text: closeButton.text
            horizontalAlignment: Text.AlignHCenter
            verticalAlignment: Text.AlignVCenter
        }
        onClicked: {
            Qt.callLater(Qt.quit)
        }
    }
}

예제 프로젝트 @ code.qt.io

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.