앱 시작시 흰색 화면을 수정하는 방법은 무엇입니까?


111

시작할 때 2 초 동안 흰색 화면을 표시하는 Android 앱이 있습니다. 내 다른 앱은이 작업을 수행하지 않지만이 작업은 수행합니다. 나는 또한 이것을 고칠 것이라는 희망으로 스플래시 스크린을 구현했습니다. 스플래시 화면 수면 시간을 늘려야합니까? 감사.


1
시작하는 활동이 그 onCreate역할 을 수행하는 데 너무 오래 걸립니다 . 해당 활동에서 "setContentView"만 시도하고이 지연이 사라 졌는지 확인하십시오.
Sherif elKhatib

1
미안합니다 저는 초보자이고 Java에 대한 경험이 없습니다. 명확하게 설명해 주시겠습니까? 내가 그것을 체크 할 수 있도록하고 :)에 "답"을주세요
익명에게

1
프로젝트에서 Java 또는 C # 을 사용하고 있습니까?
Sherif elKhatib

1
이 링크는 당신을 도울 것입니다 희망 : cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous
미칼 Daronin에게

답변:


104

AndroidManifest.xml 파일의 시작 활동에 투명 테마를 언급하기 만하면됩니다.

처럼:

<activity
        android:name="first Activity Name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" >
 <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
 </activity>

Activity대신 클래스를 사용하여 화면을 확장하십시오 AppCompatActivity.

처럼 :

public class SplashScreenActivity extends Activity{

  ----YOUR CODE GOES HERE----
}

4
하지만 사용하여 final ActionBar actionBar = getActionBar();테마가 반투명 때 널 (null)을 반환합니다
누군가 어딘가에

17
Pankaj-네, 나쁜 UI 경험이 "미리보기"창 때문이라는 것을 알게되었습니다 ... 분명히 Google의 누군가가 흰색 미리보기 창이 기본적으로 사용하기에 정말 멋지다고 결정했습니다. 그러나 어두운 배경을 사용하는 앱에서는 정말 나쁜 생각입니다. 해결책은 앱에 대한 사용자 지정 스타일을 만들고 사용할 색상에 'android : windowBackground'를 지정하는 것입니다. 섹션 "완벽한 미리보기 창"을 참조하십시오 cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous
어딘가의 누군가가

2
@Hagai L "java.lang.IllegalStateException :이 활동에 Theme.AppCompat 테마 (또는 하위 항목)를 사용해야합니다."와 같은 오류가 표시됩니다.
TejaDroid

1
android : theme = "@ android : style / Theme.Translucent.NoTitleBar"가 나를 위해 작동하지 않았습니다. 제안 사항이 있습니까?
jay

1
@TejaDroid가 중지 오류 "java.lang.IllegalStateException"을 얻으려면 android.app.Activity로 활동을 확장해야합니다. 지금 AppCompactActivity를 사용하고 있습니다. 따라서 AppCompactActivity의 경우 일반 테마를 사용할 수 없습니다.
Ready Android

167

이것을 사용자 정의 스타일에 넣으면 모든 문제가 해결됩니다. 해키 반투명 수정을 사용하면 작업 표시 줄과 탐색 모음이 반투명 해지고 스플래시 화면 또는 기본 화면이 스파게티처럼 보입니다.

<item name="android:windowDisablePreview">true</item>


3
Thx man, 많은 번거 로움에서 구했습니다. 처음에는 설정 포인트를 얻기가 어려웠습니다. 기본 테마 블록이됩니다. 인라인`<style name = "AppTheme"parent = "Theme.AppCompat.NoActionBar"> <item name = "android : windowDisablePreview"> true </ item>`는 기본 스타일의 진입 점이어야합니다. .xml
HumaN 2011

2
고마워! res 폴더의 style.xml에 스타일 태그 name = "AppTheme"(또는 매니페스트에서 사용하는 테마)에
넣습니다.

나를 위해 일했습니다. 감사합니다.
user1510006

DEVS의 많은 사용자 정의 테마 사용하기 때문에 나는 그것이 허용 대답해야한다고 생각
Sviatoslav Zaitsev

매우 도움이됩니다 :)
jasan

74

여기에 이미지 설명 입력

튜브처럼 .. 처음에는 흰색 화면 대신 아이콘 화면을 표시합니다. 그리고 2 초 후에 홈 화면이 표시됩니다.

먼저 res / drawable에서 XML 드로어 블을 만듭니다.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:drawable="@color/gray"/>

    <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/ic_launcher"/>
    </item>

</layer-list>

다음으로 이것을 테마에서 스플래시 활동의 배경으로 설정합니다. styles.xml 파일로 이동하여 스플래시 활동에 대한 새 테마를 추가하십시오.

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/background_splash</item>
    </style>

</resources>

새 SplashTheme에서 창 배경 속성을 XML 드로어 블로 설정합니다. AndroidManifest.xml에서 스플래시 활동의 테마로이를 구성하십시오.

<activity
    android:name=".SplashActivity"
    android:theme="@style/SplashTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

이 링크는 원하는 것을 제공합니다. 단계별 절차. https://www.bignerdranch.com/blog/splash-screens-the-right-way/

최신 정보:

는 다음 layer-list과 같이 더 간단 할 수 있습니다 ( <bitmap>태그 와 달리 중앙 로고에 벡터 드로어 블도 허용 ).

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Background color -->
    <item android:drawable="@color/gray"/>

    <!-- Logo at the center of the screen -->
    <item
        android:drawable="@mipmap/ic_launcher"
        android:gravity="center"/>
</layer-list>

1
이건 정말 대단한데, 어떻게하면 아래에 텍스트를 추가 할 수 mipmap/ic_launcher
있습니까?

6
이것이 최고의 답변입니다. 그 이유는 위의 솔루션을 사용할 때 앱의 시각적 시작이 지연되기 때문입니다.
Jnr

비트 맵을 제어하기위한 또 하나의 수정 사항 stackoverflow.com/questions/23079355/…
amorenew

1
이것은 받아 들여진 대답이어야하며, 다른 모든 사람들은 앱이 사용자 관점에서 시작되지 않은 것처럼 보이게합니다. 더 간단한 드로어 블 layer-list은 다음과 같습니다. <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Background color --> <item android:drawable="@color/white"/> <!-- Logo at the center of the screen --> <item android:drawable="@mipmap/ic_launcher" android:gravity="center"/> </layer-list>
Franco

이 솔루션은 프로그래밍 방식으로 레이어 목록의 배경색을 변경하려는 경우 문제를 해결하지 않습니다 (예 : 회색에서 파란색으로). 이 시나리오에서는 첫 번째 회색 화면이 1 ~ 2 초 동안 나타난 다음 파란색 배경이 설정됩니다!
Mohammad Afrashteh

71

다음과 같이 style.xml에서 스타일을 만드십시오.

<style name="Theme.Transparent" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

AndroidManifest의 활동과 함께 다음과 같이 사용하십시오.

<activity android:name=".ActivitySplash" android:theme="@style/Theme.Transparent">

8

Cyril Mottier의이 멋진 게시물을 읽어야합니다. Android 앱 출시가 멋지게 시작되었습니다.

당신은 당신을 사용자 정의 할 필요가 Theme귀하의 사용자 정의 할 수 style.xml 및 피하기에 onCreateActionBar.setIcon로 / setTitle이라는 / 등.

Google의 성능 팁 에 대한 문서도 참조하십시오 .

사용 Trace View하고 Hierarchy Viewer당신의보기를 표시 할 수있는 시간을 볼 수 : 안드로이드의 성능 최적화 / 성능 튜닝에 안드로이드를

AsyncTask일부보기를 표시하는 데 사용 합니다.


6

이것은 예제 앱의 내 AppTheme입니다.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowIsTranslucent">true</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

당신이 볼 수 있듯이, 나는 기본 색상을하고 난을 추가 android:windowIsTranslucent하고로 설정합니다 true.

내가 Android 개발자로 알고있는 한, 이것은 애플리케이션 시작시 흰색 화면을 숨기려면 설정해야하는 유일한 것입니다.


4

두 속성 모두 둘 중 하나를 사용합니다.

    <style name="AppBaseThemeDark" parent="@style/Theme.AppCompat">
            <!--your other properties -->
            <!--<item name="android:windowDisablePreview">true</item>-->
            <item name="android:windowBackground">@null</item>
            <!--your other properties -->
    </style>

4

user543의 대답은 완벽

<activity
        android:name="first Activity Name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" >
 <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
 </activity>

그러나:

You'r 런처 활동 extands에 있어야 활동 하지 AppCompatActivity는 그것은 기본적으로 온으로!


나는 모든 곳 에서이 동일한 솔루션을 작성했기 때문에이 솔루션을 여러 번 시도했지만 작동하지 않았습니다.하지만 내 활동이 AppCompatActivity를 확장하므로 시간을 절약 할 수 있으므로 작동하지 않습니다.
Rucha Bhatt Joshi

4

흰색 배경은 Apptheme에서 나옵니다. 흰색 화면 대신 응용 프로그램 로고와 같은 유용한 것을 표시 할 수 있습니다. 사용자 지정 테마를 사용하여 수행 할 수 있습니다. 앱에서 테마 만 추가하면됩니다.

android:windowBackground=""

속성. 속성 값은 이미지, 레이어 목록 또는 색상 일 수 있습니다.


투명 색상을 창으로 설정하면 더 좋습니다. <item name="android:windowBackground">@android:color/transparent</item>
아몰 데 사이

이것은 받아 들여진 대답이어야합니다. 어쨌든 YouTube 앱과 같은 스케일링 애니메이션을 추가하는 방법을 알고 있습니까?
pratham kesarkar

이제 흰색 대신 검은 색입니다.
Ümañg ßürmån

2

다음은 스플래시 화면을 디자인하는 방법을 제안하는 링크입니다. 흰색 / 검정색 배경을 피하려면 스플래시 배경으로 테마를 정의하고 해당 테마를 매니페스트 파일에서 스플래시하도록 설정해야합니다.

https://android.jlelse.eu/right-way-to-create-splash-screen-on-android-e7f1709ba154

res / drawable 폴더 내의 splash_background.xml

<?xml version=”1.0" encoding=”utf-8"?>
 <layer-list xmlns:android=”http://schemas.android.com/apk/res/android">

 <item android:drawable=”@color/colorPrimary” />

 <item>
 <bitmap
 android:gravity=”center”
 android:src=”@mipmap/ic_launcher” />
 </item>

</layer-list>

아래 스타일 추가

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    <!-- Splash Screen theme. -->
    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_background</item>
    </style>

Manifest에서 아래와 같이 테마 설정

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

2

나는 또한 내 프로젝트 중 하나에서 같은 문제를 겪었습니다. 스플래시 화면에 제공된 테마에 다음 매개 변수를 추가하여 문제를 해결했습니다.

<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsTranslucent">true</item>

내가 작성한 이 블로그 게시물 에서 이유와 해결 방법을 찾을 수 있습니다 . 도움이되기를 바랍니다.


답변에 직접 세부 사항을 추가하십시오. 링크가 무효화 될 수 있으므로 답변에 실제 콘텐츠를 포함하는 것이 좋으며 링크는 보충용 일뿐입니다.
OOBalance

1

매니페스트의 테마를 다음과 같이 설정하여 수정할 수 있습니다.

<activity
        android:name=".MySplashActivityName"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" >
 <intent-filter>
     <action android:name="android.intent.action.MAIN" />
     <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

그 후에
java.lang.IllegalStateException 이 발생하는 경우 :이 활동에 Theme.AppCompat 테마 (또는 하위 항목)를 사용해야합니다.
그런 다음 MySplashActivity에서 AppCompatActivity 대신 Activity 를 확장해야 할 수 있습니다 .

도움이 되었기를 바랍니다.


1

흰색 배경은 앱이 메모리에로드되는 동안 Android가 시작되기 때문에 발생하며 SplashTheme 아래에이 두 줄의 코드를 추가하면 피할 수 있습니다.

<item name="android:windowDisablePreview">true</item>
<item name="android:windowIsTranslucent">true</item>

0

Instant Run android studio 설정을 비활성화해야합니다.

File> Settings> Build, Execution, Deployment> Instant Run 거기에 표시된 모든 옵션을 선택 취소합니다.

참고 : Instant Run 으로 인한 흰색 화면 문제 는 디버그 빌드에만 해당되며 릴리스 빌드에는이 문제가 나타나지 않습니다.


0

다음 코드를 시도하십시오.

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

이 코드는 나를 위해 작동하며 모든 Android 장치에서 작동합니다.


코드 전용 답변은 권장하지 않습니다. 수정을 클릭하고 코드가 질문을 어떻게 처리하는지 요약하는 단어를 추가하거나 귀하의 답변이 이전 답변 / 답변과 어떻게 다른지 설명하십시오. 관련 리뷰
Nick

0

솔루션은 매우 간단합니다!

가 있습니다 세 가지 이 문제에 대한 기본 이유

  1. 당신이하고있는 / 복잡한 작업 실행 헤비 / 롱을 onCreateVeiw 기능에 있습니다.
  2. 스레드를 사용하는 경우. 그러면 Thread Sleep 시간 이 매우 클 수 있습니다.
  3. 타사 라이브러리를 사용하는 경우 . 앱 시작시 초기화 되는 것은 이 문제를 일으킬 수 있습니다.

해결책 :

해결책 1 :

  Remove the Heavy Task from onCreateView() function and place it some where appropriate place.

해결책 2 :

  Reduce the Thread Sleep time.

해결책 3 :

  Remove the Third party library at app initialize at implement them with some good strategy.

제 경우에는이 문제를 일으키는 Sugar ORM을 사용하고 있습니다.

개선하려면 공유하세요.


0

이것은 문제를 해결했습니다.

styles.xml 파일을 편집하십시오.


아래 코드를 붙여 넣으세요.

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowIsTranslucent">true</item>
    </style>

</resources>

그리고 AndroidManifest.xml 파일 에서 수정하는 것을 잊지 마십시오 . ( 테마명 )

이 파일에서 활동의 선언 순서에주의하십시오.


0
I encountered a similar problem and to overcome it, I implemented the code below in styles, i.e res->values->styles->resource tag 
<item name="android:windowDisablePreview">true</item>

Here is the whole code:

<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowDisablePreview">true</item>
</style>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.