Bagaimana cara memperbaiki layar putih pada aplikasi Start up?

111

Saya memiliki aplikasi android yang menampilkan layar putih selama 2 detik saat startup. Aplikasi saya yang lain tidak melakukan ini, tetapi yang ini melakukannya. Saya juga telah menerapkan splashscreen dengan harapan itu akan memperbaikinya. Haruskah saya menambah waktu tidur layar splash? Terima kasih.

Anonim
sumber
1
Aktivitas yang Anda mulai membutuhkan waktu terlalu lama untuk melakukan onCreatebagiannya. Cobalah untuk hanya "setContentView" dalam aktivitas itu dan periksa apakah penundaan ini sudah hilang.
Sherif elKhatib
1
maaf saya seorang pemula dan saya tidak memiliki pengalaman dengan java, dapatkah anda menjelaskan dengan jelas? dan tolong beri "jawaban" sehingga saya bisa mencentangnya :)
Anonim
1
Apakah Anda menggunakan java atau c # dalam proyek Anda?
Sherif elKhatib
1
Semoga tautan ini bisa membantu Anda: cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous
Mikalai Daronin
geeksforandroidgeeks.com/android/splash_issue Silakan melalui tautan
Vivek Kumar Samele

Jawaban:

104

Sebutkan saja tema transparan ke aktivitas awal di file AndroidManifest.xml.

Suka:

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

dan perluas layar itu dengan Activitymenggantikan kelas AppCompatActivity.

Suka :

public class SplashScreenActivity extends Activity{

  ----YOUR CODE GOES HERE----
}
pengguna543
sumber
4
tetapi menggunakan final ActionBar actionBar = getActionBar();akan mengembalikan nol saat Tema tembus
Seseorang Di suatu tempat
16
Pankaj - ya, saya mengetahui bahwa pengalaman UI yang buruk disebabkan oleh jendela "pratinjau" ... tampaknya seseorang di Google memutuskan bahwa jendela pratinjau putih benar-benar mengagumkan untuk digunakan secara default. Namun, dalam aplikasi yang menggunakan latar belakang gelap, itu ide yang sangat buruk. Solusinya adalah membuat gaya kustom untuk aplikasi Anda dan menentukan 'android: windowBackground' ke warna yang ingin Anda gunakan. Lihat bagian "jendela pratinjau sempurna" cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous
Someone Somewhere
2
@Hagai L Ada kesalahan seperti "java.lang.IllegalStateException: Anda perlu menggunakan tema Theme.AppCompat (atau turunan) dengan aktivitas ini."
TejaDroid
1
android: theme = "@ android: style / Theme.Translucent.NoTitleBar" tidak berfungsi untuk saya, ada saran?
jay
1
@TejaDroid untuk mendapatkan error stop "java.lang.IllegalStateException" Anda harus memperluas Aktivitas Anda dengan android.app.Activity, sekarang Anda menggunakan AppCompactActivity. Jadi untuk AppCompactActivity Anda tidak dapat menggunakan tema normal.
Siap Android
167

Taruh ini dalam gaya khusus dan itu menyelesaikan semua masalah. Menggunakan perbaikan tembus hacky akan membuat bilah tugas dan bilah navigasi tembus cahaya dan membuat splashscreen atau layar utama terlihat seperti spaghetti.

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

ireq
sumber
3
Terima kasih, selamat dari banyak kerumitan. Awalnya saya mengalami kesulitan untuk mendapatkan titik pengaturan. Ini akan menjadi blok tema utama: inline `<style name =" AppTheme "parent =" Theme.AppCompat.NoActionBar "> <item name =" android: windowDisablePreview "> true </item>` harus menjadi titik masuk pada gaya utama .xml
HumaN
2
Terima kasih! Letakkan ke style.xml di folder res ke dalam style tag name = "AppTheme" (atau tema apa yang Anda gunakan dalam manifes)
Dimmduh
Bekerja untuk saya. Terima kasih.
pengguna1510006
Saya pikir itu harus diterima sebagai jawaban, karena banyak pengembang menggunakan tema khusus
Sviatoslav Zaitsev
sangat membantu :)
jasan
74

masukkan deskripsi gambar di sini

Seperti Anda tabung .. awalnya mereka menampilkan layar ikon, bukan layar putih. Dan setelah 2 detik menunjukkan layar beranda.

pertama buat XML drawable di res / drawable.

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

Selanjutnya, Anda akan mengatur ini sebagai latar belakang aktivitas percikan Anda di tema. Arahkan ke file styles.xml Anda dan tambahkan tema baru untuk aktivitas splash Anda

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

Di SplashTheme baru Anda, setel atribut latar belakang jendela ke XML drawable Anda. Konfigurasikan ini sebagai tema aktivitas percikan Anda di 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>

Tautan ini memberikan apa yang Anda inginkan. prosedur langkah demi langkah. https://www.bignerdranch.com/blog/splash-screens-the-right-way/

MEMPERBARUI:

The layer-listbisa lebih sederhana seperti ini (yang juga menerima digambar vektor untuk logo berpusat, tidak seperti <bitmap>tag):

<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>
Abhi
sumber
1
Ini sangat bagus, tapi bagaimana saya bisa menambahkan teks di bawahmipmap/ic_launcher
Hasan A Yousef
6
Ini jawaban terbaik. Alasannya adalah saat menggunakan solusi di atas, ada penundaan dalam startup visual aplikasi.
Jnr
satu perbaikan lagi untuk mengontrol bitmap stackoverflow.com/questions/23079355/…
amorenew
1
Ini harus menjadi jawaban yang diterima, yang lainnya hanya membuatnya tampak seperti aplikasi tidak pernah dimulai dari sudut pandang pengguna. Drawable yang lebih sederhana layer-listbisa berupa ini: <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
Solusi ini tidak menyelesaikan masalah saat kita ingin mengubah warna latar belakang dalam daftar lapisan secara terprogram (dalam contoh Anda dari abu-abu misalnya menjadi biru). Dalam skenario ini, layar abu-abu pertama muncul selama satu atau dua detik, kemudian latar belakang biru disetel!
Mohammad Afrashteh
71

Buat gaya di style.xml Anda sebagai berikut:

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

dan gunakan dengan aktivitas Anda di AndroidManifest sebagai:

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

Anda harus membaca posting hebat ini oleh Cyril Mottier: Peluncuran Aplikasi Android menjadi luar biasa

Anda perlu menyesuaikan Themein style.xml Anda dan menghindari untuk menyesuaikan di Anda onCreatesebagai ActionBar.setIcon / setTitle / etc.

Lihat juga Dokumentasi Tips Kinerja oleh Google.

Gunakan Trace Viewdan Hierarchy Vieweruntuk melihat waktu untuk menampilkan Views Anda: Android Performance Optimization / Performance Tuning Di Android

Gunakan AsyncTaskuntuk menampilkan beberapa tampilan.

fllo
sumber
6

Ini adalah AppTheme saya di aplikasi contoh:

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

Seperti yang Anda lihat, saya memiliki warna default dan kemudian saya menambahkan android:windowIsTranslucentdan mengaturnya ke true.

Sejauh yang saya tahu sebagai Pengembang Android, ini adalah satu-satunya hal yang perlu Anda atur untuk menyembunyikan layar putih di awal aplikasi.

luiscosta
sumber
4

Kedua properti bekerja menggunakan salah satunya.

    <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>
Sohail Zahid
sumber
4

The Jawabannya user543 sempurna

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

Tapi:

Anda LAUNCHER Aktivitas harus memperluas Aktivitas , bukan AppCompatActivity karena ini datang secara default!

Igor Fridman
sumber
saya mencoba solusi ini berkali-kali karena di mana-mana menulis solusi yang sama ini, itu tidak dapat berfungsi -> tetapi Anda TETAPI menghemat waktu saya Aktivitas saya memperluas AppCompatActivity itu sebabnya tidak berfungsi saya mengubahnya menjadi aktivitas sekarang berfungsi terima kasih kawan !!
Rucha Bhatt Joshi
4

Latar belakang putih berasal dari Apptheme. Anda dapat menampilkan sesuatu yang berguna seperti logo aplikasi Anda alih-alih layar putih. Itu dapat dilakukan dengan menggunakan tema khusus. Di Tema aplikasi Anda cukup tambahkan

android:windowBackground=""

atribut. Nilai atribut dapat berupa gambar atau daftar berlapis atau warna apa pun.

Rajesh.k
sumber
Ini berfungsi, Lebih baik jika Anda mengatur warna transparan ke jendela. <item name="android:windowBackground">@android:color/transparent</item>
Amol Desai
Ini harus menjadi jawaban yang diterima. Ngomong-ngomong, apakah Anda tahu cara menambahkan animasi penskalaan seperti aplikasi youtube.
pratham kesarkar
Alih-alih Putih sekarang menjadi hitam.
Ümañg ßürmån
2

Di bawah ini adalah tautan yang menyarankan cara mendesain layar Splash. Untuk menghindari latar belakang putih / hitam kita perlu mendefinisikan tema dengan latar belakang percikan dan mengatur tema itu untuk memercikkan dalam file manifes.

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

splash_background.xml di dalam folder res / drawable

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

Tambahkan gaya di bawah ini

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

Di Manifest, set tema seperti yang ditunjukkan di bawah ini

<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>
Rocky
sumber
2

saya juga memiliki masalah yang sama di salah satu proyek saya. Saya menyelesaikannya dengan menambahkan beberapa parameter berikut dalam tema yang disediakan ke layar splash.

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

Anda dapat menemukan alasan dan resolusinya dalam posting blog yang saya tulis ini. Semoga membantu.

divaPrajapati09
sumber
Harap tambahkan detailnya langsung ke jawaban Anda. Tautan bisa menjadi tidak valid, itulah mengapa kami ingin jawaban berisi konten sebenarnya, tautan hanya sebagai pelengkap.
OOBalance
1

Ini bisa diperbaiki dengan menyetel tema di manifes Anda sebagai

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

dan setelah itu jika Anda mendapatkan
java.lang.IllegalStateException: Anda perlu menggunakan tema Theme.AppCompat (atau turunan) dengan aktivitas ini.
maka Anda mungkin perlu memperluas Aktivitas sebagai ganti AppCompatActivity di MySplashActivity Anda.

Semoga membantu!

Tuan Kelinci
sumber
1

Latar belakang putih disebabkan karena Android dimulai saat aplikasi dimuat di memori, dan ini dapat dihindari jika Anda hanya menambahkan 2 baris kode ini di bawah Tema Splash.

<item name="android:windowDisablePreview">true</item>
<item name="android:windowIsTranslucent">true</item>
Farid Haq
sumber
0

Anda harus menonaktifkan Pengaturan studio Android Instant Run.

File> Pengaturan> Build, Execution, Deployment> Instant Run hapus centang semua opsi yang ditampilkan di sana.

Catatan: Masalah layar putih karena Instant Run hanya untuk build Debug, Masalah ini tidak akan muncul di build rilis.

Mina Farid
sumber
0

Coba kode berikut:

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

Kode ini berfungsi untuk saya dan akan berfungsi di semua perangkat Android.

Hitesh sapra
sumber
Jawaban hanya kode tidak disarankan. Silakan klik edit dan tambahkan beberapa kata yang meringkas bagaimana kode Anda menjawab pertanyaan, atau mungkin menjelaskan bagaimana jawaban Anda berbeda dari jawaban / jawaban sebelumnya. Dari Ulasan
Nick
0

Solusinya sangat Sederhana!

Ada Tiga Alasan Dasar untuk Masalah Ini

  1. Anda sedang melakukan tugas Berat / Lama berjalan / Kompleks di Fungsi onCreateVeiw.
  2. Jika Anda menggunakan Thread. Maka waktu Thread Sleep mungkin sangat lama.
  3. Jika Anda menggunakan perpustakaan Pihak Ketiga . Yang diinisialisasi pada saat aplikasi start up dapat menyebabkan masalah ini.

Solusi:

Solusi 1:

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

Solusi 2:

  Reduce the Thread Sleep time.

Solusi 3:

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

Dalam Kasus saya, saya menggunakan Sugar ORM yang menyebabkan masalah ini.

Bagikan untuk meningkatkan.

Sheharyar Ejaz
sumber
0

Ini memecahkan masalah:

Edit file styles.xml Anda:


Tempel kode di bawah ini:

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

Dan jangan lupa untuk melakukan modifikasi pada file AndroidManifest.xml . ( nama tema )

Berhati-hatilah dengan urutan deklarasi aktivitas dalam file ini.

Julien Jm
sumber
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>
Emmanuel Ametepee
sumber