Uygulama başlangıcındaki beyaz ekranı nasıl düzeltebilirim?


111

Başlangıçta 2 saniye beyaz ekran görüntüleyen bir android uygulamam var. Diğer uygulamalarım bunu yapmıyor ama bu yapıyor. Bunu düzeltmesi umuduyla bir açılış ekranı da uyguladım. Açılış ekranı uyku süremi artırmalı mıyım? Teşekkürler.


1
Başladığınız faaliyetin onCreaterolünü yerine getirmesi çok uzun sürüyor . Bu aktivitede sadece "setContentView" yapmayı deneyin ve bu gecikmenin geçip geçmediğini kontrol edin.
Sherif elKhatib

1
üzgünüm acemiyim ve java ile hiç tecrübem yok, lütfen net bir şekilde açıklar mısınız? ve lütfen işaretleyebilmem için bir "yanıt" verin :)
Anonim

1
Projenizde java veya c # kullanıyor musunuz ?
Sherif elKhatib


Yanıtlar:


104

AndroidManifest.xml dosyasındaki başlangıç ​​etkinliğine şeffaf temayı söylemeniz yeterli.

Sevmek:

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

ve bu ekranı yerine Activitysınıfla genişletin AppCompatActivity.

sevmek :

public class SplashScreenActivity extends Activity{

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

4
ancak final ActionBar actionBar = getActionBar();Tema yarı saydam olduğunda kullanmak boş döndürür
Someone Somewhere

17
Pankaj - evet, kötü kullanıcı arayüzü deneyiminin "önizleme" penceresinden kaynaklandığını öğrendim ... Görünüşe göre Google'dan biri beyaz bir önizleme penceresinin varsayılan olarak kullanılmasının gerçekten harika olduğuna karar verdi. Ancak, koyu arka plan kullanan bir uygulamada bu gerçekten kötü bir fikirdir. Çözüm, uygulamanız için özel bir stil oluşturmak ve kullanmak istediğiniz rengi 'android: windowBackground' olarak belirlemektir. "Mükemmel önizleme penceresi" bölümüne bakın cyrilmottier.com/2013/01/23/android-app-launching-made-gcellence
Someone Somewhere

2
@Hagai L Bana "java.lang.IllegalStateException: Bu etkinlikle bir Theme.AppCompat teması (veya soyundan gelen) kullanmanız gerekiyor." Gibi bir hata veriyor.
TejaDroid

1
android: theme = "@ android: style / Theme.Translucent.NoTitleBar" benim için işe yaramadı, herhangi bir öneri?
jay

1
@TejaDroid "java.lang.IllegalStateException" dur hatasını almak için Aktivitenizi android.app.Activity ile genişletmeniz gerekiyor, şu anda AppCompactActivity kullanıyorsunuz. Yani AppCompactActivity için normal temaları kullanamazsınız.
Hazır Android

167

Bunu özel bir stile koyun ve tüm sorunları çözer. Keskin yarı saydam düzeltmeyi kullanmak, görev çubuğunuzu ve gezinme çubuğunuzu yarı saydam hale getirecek ve açılış ekranını veya ana ekranı spagetti gibi gösterecektir.

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


3
Thx adam, birçok güçlükten kurtuldu. Başlangıçta ayar noktasını elde etmekte zorlanıyordum. Ana tema bloğu olacak: satır içi "<style name =" AppTheme "parent =" Theme.AppCompat.NoActionBar "> <item name =" android: windowDisablePreview "> true </item>", ana stildeki giriş noktası olmalıdır .xml
HumaN

2
Teşekkürler! Res klasöründeki style.xml'ye style tag name = "AppTheme" (veya manifestte kullandığınız temayı)
ekleyin

Benim için çalıştı. Teşekkür ederim.
user1510006

Yanıtın kabul edilmesi gerektiğini düşünüyorum çünkü birçok geliştirici özel temalar kullanıyor
Sviatoslav Zaitsev

süper yararlı :)
jasan

74

görüntü açıklamasını buraya girin

Tıpkı tüp gibi .. başlangıçta beyaz ekran yerine simge ekranını gösterirler. Ve 2 saniye sonra ana ekranı gösterir.

ilk olarak res / drawable'da bir XML çekilebilir oluşturun.

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

Ardından, bunu temadaki açılış etkinliğinizin arka planı olarak ayarlayacaksınız. Styles.xml dosyanıza gidin ve açılış etkinliğiniz için yeni bir tema ekleyin

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

Yeni SplashTheme programınızda pencere arka plan özniteliğini XML çekilebilirinize ayarlayın. Bunu AndroidManifest.xml'nizde sıçrama etkinliğinizin teması olarak yapılandırın:

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

Bu bağlantı istediğinizi verir. adım adım prosedür. https://www.bignerdranch.com/blog/splash-screens-the-right-way/

GÜNCELLEME:

Bunun layer-listgibi daha da basit olabilir ( <bitmap>etiketin aksine ortalanmış logo için vektör çizimlerini de kabul eder ):

<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
Bu gerçekten harika, ama altına nasıl metin ekleyebilirimmipmap/ic_launcher
Hasan A Yousef

6
Bu en iyi cevap. Nedeni, yukarıdaki çözümleri kullanırken, uygulamanın görsel başlangıcında bir gecikme olmasıdır.
Jnr


1
Bu kabul edilen cevap olmalı, diğerleri sadece uygulamanın kullanıcı açısından hiç başlamamış gibi görünmesini sağlar. Daha basit bir çekiliş layer-listşu olabilir: <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

Katman listesindeki arka plan rengini programlı olarak değiştirmek istediğimizde (örneğinizde griden örneğin maviye) bu çözüm sorunu çözmez. Bu senaryoda, ilk gri ekran bir veya iki saniye görünür, ardından mavi arka plan ayarlanır!
Mohammad Afrashteh

71

Style.xml dosyanızda aşağıdaki gibi bir stil oluşturun:

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

ve AndroidManifest'teki etkinliğinizle birlikte kullanın:

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

8

Cyril Mottier tarafından yazılan bu harika gönderiyi okumalısınız: Android Uygulama lansmanı muhteşem hale geldi

Eğer özelleştirmek için gereken Themede özelleştirmek için style.xml ve kaçınmak içinonCreate ActionBar.setIcon olarak / setTitle / vb.

Ayrıca Google'ın Performans İpuçları ile ilgili Dokümantasyona bakın .

Görünümlerinizi görüntülemek için zamanı görmek için Trace Viewve kullanın Hierarchy Viewer: Android'de Android Performans Optimizasyonu / Performans Ayarlaması

AsyncTaskBazı görünümleri görüntülemek için kullanın .


6

Örnek bir uygulamadaki AppTheme'im:

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

Gördüğünüz gibi, varsayılan renklere sahibim ve sonra ekledim android:windowIsTranslucentvetrue .

Bir Android Geliştirici olarak bildiğim kadarıyla, uygulamanın başlangıcında beyaz ekranı gizlemek için ayarlamanız gereken tek şey bu.


4

Her iki özellik de çalışır , bunlardan herhangi birini kullanır.

    <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 cevap mükemmeldir

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

Fakat:

You'r BAŞLATICISI Etkinliği extands gerekir Aktivite değil AppCompatActivity varsayılan olarak geldi!


Her yerde aynı çözümü yazdığı için bu çözümü defalarca denedim, işe yaramadı -> AMA zamanımı kurtarın Aktivitem AppCompatActivity'yi uzatıyor bu yüzden çalışmıyor, şimdi aktiviteye dönüştürdüm, şimdi çalışıyor, teşekkürler dostum !!
Rucha Bhatt Joshi

4

Beyaz arka plan Apptheme'den geliyor Beyaz ekran yerine uygulama logonuz gibi faydalı bir şey gösterebilirsiniz. Bu özel tema kullanılarak yapılabilir. Uygulamanızda Tema sadece ekleyin

android:windowBackground=""

özniteliği. Öznitelik değeri bir resim veya katmanlı liste veya herhangi bir renk olabilir.


Şeffaf rengi pencereye ayarlarsanız bu daha iyi çalışır. <item name="android:windowBackground">@android:color/transparent</item>
Amol Desai

Kabul edilen cevap bu olmalıdır. Her neyse, youtube uygulaması gibi ölçeklendirme animasyonunu nasıl ekleyeceğinizi biliyor musunuz?
pratham kesarkar

Beyaz yerine artık siyah.
Ümañg ßürmån

2

Açılış ekranının nasıl tasarlanacağını gösteren bağlantı aşağıdadır. Beyaz / siyah arka plandan kaçınmak için, splash arka planlı bir tema tanımlamamız ve bu temayı manifest dosyasında sıçrayacak şekilde ayarlamamız gerekir.

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

res / drawable klasörünün içinde 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>

Aşağıdaki stilleri ekleyin

<!-- 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'te temayı aşağıda gösterildiği gibi ayarlayın

<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

Bir projemde de aynı sorunu yaşadım. Açılış ekranına sağlanan temaya aşağıdaki parametreleri ekleyerek çözdüm.

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

Sebebini ve çözümünü benim yazdığım bu blog yazısında bulabilirsiniz . Umarım yardımcı olur.


Lütfen ayrıntıları doğrudan cevabınıza ekleyin. Bağlantılar geçersiz hale gelebilir, bu nedenle yanıtın gerçek içeriği içermesini seviyoruz, bağlantı yalnızca tamamlayıcıdır.
OOBalance

1

Bildiriminizdeki temayı şu şekilde ayarlayarak düzeltilebilir:

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

ve bundan sonra
java.lang.IllegalStateException alıyorsanız : Bu etkinlikle bir Theme.AppCompat teması (veya alt öğesi) kullanmanız gerekir. AppCompatActivity yerine Activity'i
genişletmeniz gerekebilir sizin MySplashActivity içinde.

Umarım yardımcı olur!


1

Beyaz arka plan, uygulama belleğe yüklenirken Android'in başlaması nedeniyle oluşur ve bu 2 satırlık kodu SplashTheme altına eklerseniz önlenebilir.

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

0

Anında Çalıştır android stüdyo ayarlarını devre dışı bırakmalısınız.

Dosya> Ayarlar> Oluşturma, Yürütme, Dağıtım> Anında Çalıştırma Burada gösterilen tüm seçeneklerin işaretini kaldırın.

Not: Anında Çalıştırma nedeniyle oluşan beyaz ekran Sorunu yalnızca Hata Ayıklama yapıları içindir, bu Sorun sürüm sürümlerinde görünmeyecektir.


0

Aşağıdaki kodu deneyin:

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

Bu kod benim için çalışıyor ve tüm Android cihazlarda çalışacak.


Yalnızca kod yanıtları önerilmez. Tıklayınız düzenlemek önceki cevabı / cevapları dan nasıl cevap farklılık açıklamak belki ve kod adresleri nasıl soru özetleyen bazı kelimeler ekleyebilir veya. Yorumdan
Nick

0

Çözümü Çok Basit!

Bu sorunun Üç Temel Nedeni vardır

  1. OnCreateVeiw Fonksiyonunda Ağır / Uzun süreli / Karmaşık görev yapıyorsunuz .
  2. İplik kullanıyorsanız. Bu durumda İplik Uyku süresi çok uzun olabilir.
  3. Herhangi bir Üçüncü Taraf kitaplığı kullanıyorsanız . Hangisi initialize app başlatmak o potansiyel müşteriler bu sorun olabilir zaman.

Çözümler:

1.Çözüm:

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

2.Çözüm:

  Reduce the Thread Sleep time.

3. Çözüm:

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

Benim durumumda bu soruna yol açan Şeker ORM kullanıyorum.

İyileştirmek için paylaşın.


0

Bu sorunu çözdü:

Styles.xml dosyanızı düzenleyin:


Aşağıdaki kodu yapıştırın:

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

Ve AndroidManifest.xml dosyasında değişiklikleri yapmayı unutmayın . ( temanın adı )

Bu dosyadaki faaliyetlerin beyan sırasına dikkat edin.


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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.