Bagaimana cara membuat layar splash?

548

Saya ingin membuat aplikasi saya terlihat lebih profesional, jadi saya memutuskan untuk membuat splash screen.

Bagaimana saya membuatnya dan kemudian mengimplementasikannya?

Efraim
sumber
58
Mengapa aplikasi terlihat lebih profesional menggunakan splash screen? Saya tahu tidak ada aplikasi android 'profesional' yang mendapatkannya.
theomega
7
Setuju dengan @theomega. Layar splash benar-benar menjengkelkan.
Matt Ball
85
Anda seharusnya hanya menampilkan layar splash jika Anda memiliki pekerjaan pemuatan latar belakang yang harus dilakukan. Jika tidak, aplikasi Anda terlihat lebih "profesional" ketika Anda memberi pengguna apa yang mereka inginkan dari aplikasi Anda secepat mungkin. Pengguna melihat (dan merasa terganggu oleh) keterlambatan melebihi 100 ms, dan Anda berada pada urutan besarnya di atas ambang batas ini dengan menambahkan splash screen.
CodeFusionMobile
74
aplikasi kindle, aldiko (reader), dolphin .. Umm OS :) Mereka semua punya splash. Opera Mobile, Mantan Reader, Maps. Saya bisa melanjutkan. Jika menyembunyikan muatan, setidaknya itu memberi tahu pengguna bahwa aplikasi Anda telah dimulai. Penundaan beberapa detik disembunyikan jauh lebih baik ketika setidaknya ada sesuatu dari Anda, di layar.
baash05
9
Layar splash memberi Anda dan peluang bagus untuk mengiklankan nama atau logo perusahaan atau aplikasi Anda. Saya suka membuat splash screen dapat diklik sehingga pengguna memiliki opsi untuk melompati permainan. Jika pengguna selalu melihat logo perusahaan Anda bahkan setengah detik setiap kali mereka membuka aplikasi Anda, mereka akan lebih cenderung mengingat siapa sih Anda. Pastikan mereka memiliki pengalaman yang baik dengan aplikasi Anda.
Chamatake-san

Jawaban:

509

Bacaan lebih lanjut:

Jawaban lama:

CARA : Layar splash sederhana

Jawaban ini menunjukkan kepada Anda bagaimana menampilkan layar splash untuk waktu yang tetap ketika aplikasi Anda mulai karena alasan merek. Misalnya Anda mungkin memilih untuk menampilkan layar splash selama 3 detik. Namun jika Anda ingin menampilkan layar spash untuk jumlah waktu yang bervariasi (mis. Waktu startup aplikasi), Anda harus memeriksa jawaban Abdullah https://stackoverflow.com/a/15832037/401025 . Namun perlu diketahui bahwa startup aplikasi mungkin sangat cepat pada perangkat baru sehingga pengguna hanya akan melihat flash yang UX buruk.

Pertama, Anda perlu menentukan layar spash di layout.xmlfile Anda

  <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical" android:layout_width="fill_parent"
          android:layout_height="fill_parent">

          <ImageView android:id="@+id/splashscreen" android:layout_width="wrap_content"
                  android:layout_height="fill_parent"
                  android:src="@drawable/splash"
                  android:layout_gravity="center"/>

          <TextView android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:text="Hello World, splash"/>

  </LinearLayout>

Dan aktivitas Anda:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;

public class Splash extends Activity {

    /** Duration of wait **/
    private final int SPLASH_DISPLAY_LENGTH = 1000;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.splashscreen);

        /* New Handler to start the Menu-Activity 
         * and close this Splash-Screen after some seconds.*/
        new Handler().postDelayed(new Runnable(){
            @Override
            public void run() {
                /* Create an Intent that will start the Menu-Activity. */
                Intent mainIntent = new Intent(Splash.this,Menu.class);
                Splash.this.startActivity(mainIntent);
                Splash.this.finish();
            }
        }, SPLASH_DISPLAY_LENGTH);
    }
}

Itu saja ;)

Suara positif
sumber
3
@ user2606414 tolong buat pertanyaan pada SO untuk masalah Anda rekatkan seluruh log kesalahan Anda.
Suara positif
39
Jangan lupa untuk menambahkan splash di Manifest
Zar E Ahmer
8
@Peter pertanyaannya bukan bagaimana menampilkan layar splash saat memuat data.
Suara
18
Ini bukan solusi yang tepat untuk layar splash, itu membuat pengguna menunggu untuk menampilkan layar splash, namun tujuan layar splash adalah sebaliknya. Ini akan menampilkan layar splash saat pengguna menunggu. Silakan lihat solusi @ Abdullah.
efeyc
4
Daripada menghentikan aplikasi untuk SPLASH_DISPLAY_LENGTHwaktu. Anda harus melakukan ini sebagai gantinya: bignerdranch.com/blog/splash-screens-the-right-way
miguel.martin
595

Catatan solusi ini tidak akan membiarkan pengguna menunggu lebih lama: penundaan layar splash tergantung pada waktu mulai aplikasi.

Ketika Anda membuka aplikasi Android apa pun yang Anda dapatkan secara default layar hitam apa saja dengan judul dan ikon aplikasi di atas, Anda dapat mengubahnya dengan menggunakan gaya / tema.

Pertama, buat style.xml di folder values ​​dan tambahkan style ke dalamnya.

<style name="splashScreenTheme" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar">
    <item name="android:windowBackground">@drawable/splash_screen</item>
</style>

Alih-alih menggunakan @android:style/Theme.DeviceDefault.Light.NoActionBarAnda dapat menggunakan tema lain sebagai orangtua.

Kedua, di aplikasi Anda Manifest.xml tambahkan android:theme="@style/splashScreenTheme"ke aktivitas utama Anda.

<activity
        android:name="MainActivity"
        android:label="@string/app_name"
        android:theme="@style/splashScreenTheme" >

Ketiga, Perbarui tema Anda di aktivitas peluncuran onCreate () Anda.

protected void onCreate(Bundle savedInstanceState) {
    // Make sure this is before calling super.onCreate
    setTheme(R.style.mainAppTheme);
    super.onCreate(savedInstanceState);
}

PEMBARUAN Lihat pos ini .

Terima kasih kepada @ mat1h dan @adelriosantiago

Abdullah
sumber
3
Tampaknya "induk" hanya didukung di API 14 dan di atas
user1832478
103
Ini adalah cara yang tepat untuk melakukan splash screen. Terima kasih! Jawaban dengan lebih banyak suara dengan penundaan hanyalah praktik yang buruk. Tidak ada yang seharusnya menunda pengguna dari melihat layar fungsional pertama.
dineth
7
Satu masalah yang saya miliki dengan ini adalah yang <item name="android:background">akan menimpa windowBackground. Dan tanpa android:backgroundditentukan, latar belakang saya di setiap fragmen akan transparan mengungkapkan aktivitas di balik konten latar depan.
William Grand
4
@ Abdullah: Saya mengikuti cara Anda mengatakan. Ini berfungsi dengan baik, tetapi layar splash muncul selama beberapa milidetik pada transisi aktivitas.
nizam.sp
3
@Abdullah, terima kasih! Itu akan menjadi solusi yang mungkin, namun saya menemukan ini: plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd , untuk menghindari membuat gambar yang berbeda untuk setiap ukuran layar, juga dimungkinkan untuk membuat XML yang berisi gambar sehingga akan terlihat baik di semua layar.
adelriosantiago
52
  • Buat aktivitas: Splash
  • Buat file XML layout: splash.xml
  • Masukkan komponen UI dalam tata letak splash.xml sehingga terlihat seperti yang Anda inginkan
  • Splash.java Anda mungkin terlihat seperti ini:

    public class Splash extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.splash);
    
            int secondsDelayed = 1;
            new Handler().postDelayed(new Runnable() {
                    public void run() {
                            startActivity(new Intent(Splash.this, ActivityB.class));
                            finish();
                    }
            }, secondsDelayed * 1000);
        }
    }
    
  • ubah ActivityB.classke aktivitas apa pun yang ingin Anda mulai setelah layar splash

  • periksa file manifes Anda dan akan terlihat seperti

        <activity
            android:name=".HomeScreen"
            android:label="@string/app_name">     
        </activity>

        <activity
            android:name=".Splash"
            android:label="@string/title_activity_splash_screen">     
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
james
sumber
28
Ini bukan tujuan splash screen. Ini membuat keterlambatan ekstra 1 detik. Layar splash harus berupa gambar saat memuat layar pertama aplikasi. Tautan ini dapat membantu. stackoverflow.com/a/7057332/869451
efeyc
2
@efeyc: Anda 100% benar .. namun, ini terlihat cukup bagus ketika aplikasi dimulai .. bukan begitu?
McLan
1
@ Suda.nese jelas tidak. Pengguna tidak ingin melihat gambar, pengguna ingin menggunakan aplikasi dan tidak memiliki penundaan yang tidak perlu
Tim
1
@TimCastelijns Itu tergantung pada aplikasi yang sedang dikembangkan dan seperti apa tampilan splashnya .. tentu saja itu dimaksudkan untuk praktis, tetapi siapa bilang itu tidak bisa digunakan sebaliknya !!
McLan
6
Setuju @ Suda.nese Jika persyaratan aplikasi termasuk layar splash, daripada layar splash itu! Tentu, itu mungkin tidak diinginkan untuk pengguna, tetapi jika klien menginginkan layar splash, maka dengan gosh berikan kepada mereka
james
29

Jawaban di atas sangat bagus, tetapi saya ingin menambahkan sesuatu yang lain. Saya baru mengenal Android, saya menemui masalah ini selama pengembangan saya. Semoga ini bisa membantu orang seperti saya.

  1. Layar Splash adalah titik masuk aplikasi saya, jadi tambahkan baris berikut di AndroidManifest.xml.

        <activity
            android:name=".SplashActivity"
            android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    
  2. Layar splash seharusnya hanya muncul sekali dalam siklus hidup aplikasi, saya menggunakan variabel boolean untuk merekam keadaan layar splash, dan hanya menampilkannya pada pertama kali.

    public class SplashActivity extends Activity {
        private static boolean splashLoaded = false;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            if (!splashLoaded) {
                setContentView(R.layout.activity_splash);
                int secondsDelayed = 1;
                new Handler().postDelayed(new Runnable() {
                    public void run() {
                        startActivity(new Intent(SplashActivity.this, MainActivity.class));
                        finish();
                    }
                }, secondsDelayed * 500);
    
                splashLoaded = true;
            }
            else {
                Intent goToMainActivity = new Intent(SplashActivity.this, MainActivity.class);
                goToMainActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                startActivity(goToMainActivity);
                finish();
            }
        }
    }
    

selamat coding!

zdd
sumber
10
Anda dapat menambahkan android:noHistory="true"di AndroidManifest.xmluntuk mencegah pengguna dari akan kembali ke splash screen menggunakan tombol kembali.
Rachel
15

Jawaban Abdullah sangat bagus. Tetapi saya ingin menambahkan lebih banyak detail dengan jawaban saya.

Menerapkan Layar Splash

Mengimplementasikan splash screen dengan cara yang benar sedikit berbeda dari yang Anda bayangkan. Tampilan splash yang Anda lihat harus siap segera, bahkan sebelum Anda dapat mengembang file tata letak dalam aktivitas splash Anda.

Jadi Anda tidak akan menggunakan file layout. Alih-alih, tentukan latar belakang layar splash Anda sebagai latar belakang tema aktivitas. Untuk melakukan ini, pertama buat XML drawable di res / drawable.

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

Itu hanya daftar layer dengan logo dalam warna latar belakang tengah dengannya.

Sekarang buka styles.xml dan tambahkan gaya ini

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

Tema ini harus actionbar dan dengan latar belakang yang baru saja kita buat di atas.

Dan dalam manifes Anda perlu mengatur SplashTheme ke aktivitas yang ingin Anda gunakan sebagai splash.

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

Kemudian di dalam kode aktivitas Anda navigasikan pengguna ke layar tertentu setelah splash menggunakan niat.

public class SplashActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        finish();
    }
}

Itu cara yang tepat untuk dilakukan. Saya menggunakan referensi ini untuk menjawab.

  1. https://material.google.com/patterns/launch-screens.html
  2. https://www.bignerdranch.com/blog/splash-screens-the-right-way/ Terima kasih kepada orang-orang ini karena mendorong saya ke arah yang benar. Saya ingin membantu orang lain karena jawaban yang diterima tidak disarankan untuk melakukan splash screen.
Zeeshan Shabbir
sumber
1
Saya melihat tutorial tentang YouTubehal ini. Tapi saya pikir ukuran bitmap akan menjadi masalah karena Anda tidak dapat mengubah ukurannya menggunakan layer-list.
RoCk RoCk
14
  1. Buat sebuah Activity SplashScreen.java

    public class SplashScreen extends Activity {
    protected boolean _active = true;
    protected int _splashTime = 3000; // time to display the splash screen in ms
    
    
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splashscreen);
    
        Thread splashTread = new Thread() {
            @Override
            public void run() {
                try {
                    int waited = 0;
                    while (_active && (waited < _splashTime)) {
                        sleep(100);
                        if (_active) {
                            waited += 100;
                        }
                    }
                } catch (Exception e) {
    
                } finally {
    
                    startActivity(new Intent(SplashScreen.this,
                            MainActivity.class));
                    finish();
                }
            };
                 };
        splashTread.start();
    }
     }
  2. splashscreen.xml akan seperti ini

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="600px" android:layout_height="1024px"
      android:background="#FF0000">
    </RelativeLayout> 
saba
sumber
13

Splash Screnn, secara default, tidak secara otomatis membuat Aplikasi Anda terlihat lebih profesional. Layar Splash yang dirancang secara profesional memiliki kemungkinan membuat Aplikasi Anda terlihat lebih profesional, tetapi jika Anda tidak tahu cara menulisnya, seberapa profesionalkah sisa Aplikasi Anda yang sebenarnya.

Satu-satunya alasan (alasan) untuk memiliki Layar Splash adalah karena Anda melakukan Perhitungan dalam jumlah besar atau sedang menunggu GPS / WiFi untuk memulai karena Aplikasi Anda bergantung pada itu sebelum mulai. Tanpa hasil Perhitungan atau akses ke GPS / WiFi (dll.) Aplikasi Anda mati dalam air, sehingga Anda merasa Anda memerlukan Splash Screen, dan HARUS memblokir tampilan Layar untuk Program yang sedang berjalan lainnya (termasuk Latar Belakang) ).

Seperti Layar Splash seharusnya terlihat seperti Aplikasi Layar Penuh Anda untuk memberi kesan bahwa itu telah diinisialisasi, maka setelah perhitungan panjang selesai rincian final bisa diisi (Gambar di-tweak). The kesempatan itu menjadi kasus atau bahwa itu adalah satu-satunya cara Program dapat dirancang perkasa kecil .

Akan lebih baik untuk memungkinkan Pengguna (dan seluruh OS) untuk melakukan sesuatu yang lain sementara mereka menunggu daripada merancang Program Anda untuk bergantung pada sesuatu yang akan memakan waktu cukup lama (ketika durasi menunggu tidak pasti).

Sudah ada Ikon di Ponsel Anda yang mengatakan bahwa GPS / WiFi mulai. Waktu atau ruang yang digunakan oleh Layar Splash dapat dihabiskan untuk memuat pra-perhitungan atau benar-benar melakukan Perhitungan. Lihat Tautan pertama di bawah ini untuk masalah yang Anda buat dan apa yang harus dipertimbangkan.

Jika Anda benar-benar harus menunggu Perhitungan atau GPS / WiFi ini, sebaiknya biarkan Aplikasi dimulai dan pop-up yang mengatakan bahwa perlu menunggu Perhitungan (Pesan "Inisialisasi" TEKSUAL baik-baik saja). Tunggu untuk GPS / WiFi diharapkan (jika mereka belum diaktifkan di Program lain) sehingga mengumumkan waktu tunggu mereka tidak perlu.

Ingatlah bahwa ketika Layar Splash memulai Program Anda sudah benar-benar berjalan, yang Anda lakukan hanyalah menunda penggunaan Program Anda dan memonopoli CPU / GPU untuk melakukan sesuatu yang sebagian besar merasa tidak perlu.

Sebaiknya kita benar-benar ingin menunggu dan melihat Layar Splash Anda setiap kali kami memulai Program Anda atau KAMI tidak akan merasa itu ditulis secara profesional. Membuat Layar Splash FULL Screen dan duplikat dari Layar Program yang sebenarnya (jadi kami pikir itu diinisialisasi padahal sebenarnya belum) MUNGKIN mencapai tujuan Anda (membuat Program Anda terlihat lebih profesional) tetapi saya tidak akan bertaruh banyak untuk itu.

Mengapa tidak melakukannya: http://cyrilmottier.com/2012/05/03/splash-screens-are-evil-dont-use-them/

Bagaimana melakukannya: https://encrypted.google.com/search?q=Android+splash+screen+source

Jadi ada alasan bagus untuk tidak melakukannya tetapi JIKA Anda yakin bahwa bagaimanapun keadaan Anda berada di luar contoh-contoh itu maka sarana untuk melakukannya diberikan di atas. Pastikan itu benar-benar membuat Aplikasi Anda terlihat lebih profesional atau Anda telah mengalahkan satu-satunya alasan yang Anda berikan untuk melakukan ini.

Ini seperti Saluran YouTube yang memulai setiap Video dengan Intro Grafis yang panjang (dan Outro) atau merasa perlu untuk menceritakan Lelucon atau menjelaskan apa yang terjadi selama seminggu terakhir (ketika itu bukan Saluran Komedi atau LifeStyles). Tunjukkan saja acaranya! (Jalankan saja Program).

rampok
sumber
12

Di atas semua jawaban benar-benar sangat baik. Tapi ada masalah kebocoran memori. Masalah ini sering dikenal di komunitas Android sebagai "Membocorkan Aktivitas" . Sekarang apa sebenarnya artinya?

Ketika perubahan konfigurasi terjadi, seperti perubahan orientasi, Android menghancurkan Activity dan membuatnya kembali. Biasanya, Pengumpul Sampah hanya akan menghapus memori yang dialokasikan dari instance Activity lama dan kita semua baik-baik saja.

"Membocorkan Aktivitas" mengacu pada situasi di mana Pengumpul Sampah tidak dapat menghapus memori yang dialokasikan dari instance Aktivitas lama karena being (strong) referencedberasal dari objek yang menjalankan instance Activity. Setiap aplikasi Android memiliki jumlah memori tertentu yang dialokasikan untuk itu. Ketika Pengumpul Sampah tidak dapat membebaskan memori yang tidak digunakan, kinerja aplikasi akan berkurang secara bertahap dan akhirnya rusak karena OutOfMemorykesalahan.

Bagaimana cara menentukan apakah aplikasi bocor memori atau tidak? Cara tercepat adalah membuka tab Memori di Android Studio dan memperhatikan memori yang dialokasikan saat Anda mengubah orientasi. Jika memori yang dialokasikan terus meningkat dan tidak pernah berkurang maka Anda memiliki kebocoran memori.

1. Memori bocor ketika pengguna mengubah orientasi. masukkan deskripsi gambar di sini

Pertama, Anda perlu menentukan layar splash di splashscreen.xmlfile sumber daya tata letak Anda

Kode Sampel untuk aktivitas layar splash.

public class Splash extends Activity {
 // 1. Create a static nested class that extends Runnable to start the main Activity
    private static class StartMainActivityRunnable implements Runnable {
        // 2. Make sure we keep the source Activity as a WeakReference (more on that later)
        private WeakReference mActivity;

        private StartMainActivityRunnable(Activity activity) {
         mActivity = new WeakReference(activity);
        }

        @Override
        public void run() {
         // 3. Check that the reference is valid and execute the code
            if (mActivity.get() != null) {
             Activity activity = mActivity.get();
             Intent mainIntent = new Intent(activity, MainActivity.class);
             activity.startActivity(mainIntent);
             activity.finish();
            }
        }
    }

    /** Duration of wait **/
    private final int SPLASH_DISPLAY_LENGTH = 1000;

    // 4. Declare the Handler as a member variable
    private Handler mHandler = new Handler();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(icicle);
        setContentView(R.layout.splashscreen);

        // 5. Pass a new instance of StartMainActivityRunnable with reference to 'this'.
        mHandler.postDelayed(new StartMainActivityRunnable(this), SPLASH_DISPLAY_LENGTH);
    }

    // 6. Override onDestroy()
    @Override
    public void onDestroy() {
     // 7. Remove any delayed Runnable(s) and prevent them from executing.
     mHandler.removeCallbacksAndMessages(null);

     // 8. Eagerly clear mHandler allocated memory
     mHandler = null;
    }
}

Untuk informasi lebih lanjut silakan kunjungi tautan ini

Maheshwar Ligade
sumber
7

Berhenti pada layar Splash untuk 4's 5 tidak perlu terlalu masuk akal. Tidak apa-apa jika Anda memuat sesuatu di latar belakang lain ikuti pendekatan ini untuk menerapkan splash screen: - Menerapkan splash screen dengan cara yang benar sedikit berbeda dari yang Anda bayangkan. Tampilan splash yang Anda lihat harus siap segera, bahkan sebelum Anda dapat mengembang file tata letak dalam aktivitas splash Anda.

Jadi Anda tidak akan menggunakan file layout. Alih-alih, tentukan latar belakang layar splash Anda sebagai latar belakang tema aktivitas. Untuk melakukan ini, 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>

Di sini, saya telah mengatur warna latar belakang dan gambar.

Selanjutnya, Anda akan mengatur ini sebagai latar belakang aktivitas splash Anda dalam tema. Navigasikan 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, atur atribut latar belakang jendela ke XML Anda yang dapat digambar. Konfigurasikan ini sebagai tema aktivitas splash Anda di AndroidManifest.xml Anda:

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

Akhirnya, kelas SplashActivity seharusnya hanya meneruskan Anda ke aktivitas utama Anda:

     public class SplashActivity extends AppCompatActivity {

             @Override
             protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

               Intent intent = new Intent(this, MainActivity.class);
               startActivity(intent);
               finish();
    }
}

Lebih detail baca ini: 1. https://www.bignerdranch.com/blog/splash-screens-the-right-way/ 2. http://blog.goodbarber.com/3-tips-to-create-a -great-splash-screen-for-your-mobile-app_a287.html

vicky
sumber
4

Ini kode lengkapnya di sini

SplashActivity.java

public class SplashActivity extends AppCompatActivity {

private final int SPLASH_DISPLAY_DURATION = 1000;

@Override
public void onCreate(Bundle bundle) {
    super.onCreate(bundle);


    new Handler().postDelayed(new Runnable(){
        @Override
        public void run() {

            Intent mainIntent = new Intent(SplashActivity.this,MainActivity.class);
            SplashActivity.this.startActivity(mainIntent);
            SplashActivity.this.finish();
        }
    }, SPLASH_DISPLAY_DURATION);
}}

Di drawables buat bg_splash.xml ini

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

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

<item>
    <bitmap
        android:gravity="center"
        android:src="@drawable/ic_in_app_logo_big"/>
</item></layer-list>

Di styles.xml buat tema khusus

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

dan akhirnya di AndroidManifest.xml tentukan tema untuk aktivitas Anda

<activity
        android:name=".activities.SplashActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/SplashTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

Bersulang.

awsleiman
sumber
Bagaimana saya menambahkan file xml alih-alihdrawable
viper
Maksud saya Anda harus membuat bg_splash.xml di direktori drawable seperti dijelaskan di atas.
awsleiman
4

Layar splash tidak boleh dimuat dari file tata letak, mungkin masih ada jeda saat memuatnya.

Cara terbaik adalah membuat Tema hanya untuk SplashScreenActivity Anda dan atur the android:windowBackgroundke sumber daya yang dapat ditarik.

https://www.bignerdranch.com/blog/splash-screens-the-right-way/

Pendeknya:

Nyatakan SplashScreenActivity Anda di manifes:

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

Di SplashScreenActivity.java Anda:

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent intent = new Intent(this, MainActivity_.class);
    startActivity(intent);
    finish();

}

Selanjutnya buat sumber daya untuk jendela latar belakang tema Anda:

<style name="SplashTheme" parent="Theme.Bumpfie.Base">
    <item name="android:windowBackground">@drawable/splash</item>
</style>

File splash.xml yang dapat digambar:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/white"/>
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/app_logo"/>
    </item>
</layer-list>
Danny Yassine
sumber
4

Setelah Android Marshmallow , penggunaan Splash screen Produktif lainnya yang saya pikirkan adalah permintaan yang diperlukanAndroid Permissions di layar splash aplikasi Anda.

sepertinya sebagian besar aplikasi menangani permintaan izin dengan cara ini.

  • Dialog membuat UIX buruk dan mereka memutuskan aliran utama dan membuat Anda memutuskan runtime dan kebenarannya adalah sebagian besar pengguna bahkan mungkin tidak peduli jika aplikasi Anda ingin menulis sesuatu pada kartu SD. Beberapa dari mereka bahkan mungkin tidak mengerti apa yang ingin kami sampaikan sampai kami menerjemahkannya dalam bahasa Inggris.

  • Meminta izin sekaligus membuat jumlah "jika lain" lebih sedikit sebelum setiap operasi dan membuat kode Anda terlihat berantakan.

Ini adalah contoh bagaimana Anda dapat meminta izin dalam aktivitas splash Anda untuk perangkat yang menjalankan Android OS 23+.

Jika semua izin diberikan ATAU sudah diberikan ATAU aplikasi berjalan pada Pre Marshmallow LALU pergi dan tampilkan konten utama dengan sedikit jeda setengah detik sehingga pengguna dapat menghargai upaya yang kami lakukan dalam membaca pertanyaan ini dan berusaha memberikan yang terbaik.

import android.Manifest;
import android.annotation.TargetApi;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import com.c2h5oh.beer.R;
import com.c2h5oh.beer.utils.Animatrix;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SplashActivity extends AppCompatActivity {

    final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124;

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

        //show animations 
        Animatrix.scale(findViewById(R.id.title_play), 100);
        Animatrix.scale(findViewById(R.id.title_edit), 100);
        Animatrix.scale(findViewById(R.id.title_record), 100);
        Animatrix.scale(findViewById(R.id.title_share), 100);

        if (Build.VERSION.SDK_INT >= 23) {

            // Marshmallow+ Permission APIs
            fuckMarshMallow();

        } else {

            // Pre-Marshmallow
            ///Display main contents
            displaySplashScreen();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS: {
                Map<String, Integer> perms = new HashMap<String, Integer>();
                // Initial
                perms.put(Manifest.permission.READ_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED);
                perms.put(Manifest.permission.RECORD_AUDIO, PackageManager.PERMISSION_GRANTED);
                perms.put(Manifest.permission.MODIFY_AUDIO_SETTINGS, PackageManager.PERMISSION_GRANTED);
                perms.put(Manifest.permission.VIBRATE, PackageManager.PERMISSION_GRANTED);
                // Fill with results
                for (int i = 0; i < permissions.length; i++)
                    perms.put(permissions[i], grantResults[i]);

                // Check for ACCESS_FINE_LOCATION
                if (perms.get(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
                        && perms.get(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED
                        && perms.get(Manifest.permission.MODIFY_AUDIO_SETTINGS) == PackageManager.PERMISSION_GRANTED
                        && perms.get(Manifest.permission.VIBRATE) == PackageManager.PERMISSION_GRANTED) {
                    // All Permissions Granted

                    // Permission Denied
                    Toast.makeText(SplashActivity.this, "All Permission GRANTED !! Thank You :)", Toast.LENGTH_SHORT)
                            .show();

                    displaySplashScreen();

                } else {
                    // Permission Denied
                    Toast.makeText(SplashActivity.this, "One or More Permissions are DENIED Exiting App :(", Toast.LENGTH_SHORT)
                            .show();

                    finish();
                }
            }
            break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }


    @TargetApi(Build.VERSION_CODES.M)
    private void fuckMarshMallow() {
        List<String> permissionsNeeded = new ArrayList<String>();

        final List<String> permissionsList = new ArrayList<String>();
        if (!addPermission(permissionsList, Manifest.permission.READ_EXTERNAL_STORAGE))
            permissionsNeeded.add("Read SD Card");
        if (!addPermission(permissionsList, Manifest.permission.RECORD_AUDIO))
            permissionsNeeded.add("Record Audio");
        if (!addPermission(permissionsList, Manifest.permission.MODIFY_AUDIO_SETTINGS))
            permissionsNeeded.add("Equilizer");
        if (!addPermission(permissionsList, Manifest.permission.VIBRATE))
            permissionsNeeded.add("Vibrate");

        if (permissionsList.size() > 0) {
            if (permissionsNeeded.size() > 0) {

                // Need Rationale
                String message = "App need access to " + permissionsNeeded.get(0);

                for (int i = 1; i < permissionsNeeded.size(); i++)
                    message = message + ", " + permissionsNeeded.get(i);

                showMessageOKCancel(message,
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                                        REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
                            }
                        });
                return;
            }
            requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                    REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
            return;
        }

        Toast.makeText(SplashActivity.this, "No new Permission Required- Launching App .You are Awesome!!", Toast.LENGTH_SHORT)
                .show();

        displaySplashScreen();
    }


    private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
        new AlertDialog.Builder(SplashActivity.this)
                .setMessage(message)
                .setPositiveButton("OK", okListener)
                .setNegativeButton("Cancel", null)
                .create()
                .show();
    }

    @TargetApi(Build.VERSION_CODES.M)
    private boolean addPermission(List<String> permissionsList, String permission) {

        if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
            permissionsList.add(permission);
            // Check for Rationale Option
            if (!shouldShowRequestPermissionRationale(permission))
                return false;
        }
        return true;
    }

    /**
     * Display main content with little delay just so that user can see
     * efforts I put to make this page
     */
    private void displaySplashScreen() {
        new Handler().postDelayed(new Runnable() {

        /*
         * Showing splash screen with a timer. This will be useful when you
         * want to show case your app logo / company
         */

            @Override
            public void run() {
                startActivity(new Intent(SplashActivity.this, AudioPlayerActivity.class));
                finish();
            }
        }, 500);
    }


}
Hitesh Sahu
sumber
4

Anda tidak akan menggunakan file tata letak. Alih-alih, tentukan latar belakang layar splash Anda sebagai latar belakang tema aktivitas. Untuk melakukan ini, pertama buat XML drawable di res / drawable.

Catatan: semua kode di bawah ini tersedia Tautan GitHub

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

Di sini, saya telah mengatur warna latar belakang dan gambar.

Selanjutnya, Anda akan mengatur ini sebagai latar belakang aktivitas splash Anda dalam tema. Navigasikan 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, atur atribut latar belakang jendela ke XML Anda yang dapat digambar. Konfigurasikan ini sebagai tema aktivitas splash Anda di AndroidManifest.xml Anda:

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

Terakhir, kelas SplashActivity Anda hanya perlu meneruskan aktivitas utama Anda:

public class SplashActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        finish();
    }
}

Perhatikan bahwa Anda bahkan tidak mengatur tampilan untuk SplashActivity ini. Tampilannya berasal dari tema. Ketika Anda mengatur UI untuk aktivitas splash Anda di tema, itu tersedia segera.

Jika Anda memang memiliki file tata letak untuk aktivitas splash Anda, file tata letak itu hanya akan terlihat oleh pengguna setelah aplikasi Anda sepenuhnya diinisialisasi, yang sudah terlambat. Anda ingin splash hanya ditampilkan dalam waktu yang sedikit sebelum aplikasi diinisialisasi.

Abhi Soni
sumber
3
public class MainActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Thread t=new Thread()
    {

        public void run()
        {   

            try {

                sleep(2000);
                finish();
                Intent cv=new Intent(MainActivity.this,HomeScreen.class/*otherclass*/);
                startActivity(cv);
            } 

            catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };
    t.start();
}
kamalasekar
sumber
2

Buat Aktivitas, beri kami Aktivitas bernama 'A', lalu buat file xml bernama myscreen.xml, dengan menetapkan gambar layar splash sebagai latar belakang, lalu gunakan penghitung waktu mundur untuk bernavigasi dari satu Aktivitas ke Aktivitas lainnya. Untuk mengetahui cara menggunakan penghitung waktu mundur, lihat jawaban saya di pertanyaan ini TimerTask di Android?

Sankar Ganesh
sumber
2

Contoh layar splash:

public class MainActivity extends Activity {
    private ImageView splashImageView;
    boolean splashloading = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        splashImageView = new ImageView(this);
        splashImageView.setScaleType(ScaleType.FIT_XY);
        splashImageView.setImageResource(R.drawable.ic_launcher);
        setContentView(splashImageView);
        splashloading = true;
        Handler h = new Handler();
        h.postDelayed(new Runnable() {
            public void run() {
                splashloading = false;
                setContentView(R.layout.activity_main);
            }

        }, 3000);

    }

}
kablu
sumber
2

Layar splash adalah objek yang tidak dapat digunakan di Android: layar tidak dapat dimuat sesegera mungkin untuk menyembunyikan penundaan dimulainya aktivitas utama. Ada dua alasan untuk menggunakannya: iklan dan operasi jaringan.

Implementasi sebagai dialog membuat lompatan tanpa penundaan dari splash screen ke UI aktivitas utama.

public class SplashDialog extends Dialog {
    ImageView splashscreen;
    SplashLoader loader;
    int splashTime = 4000;

    public SplashDialog(Context context, int theme) {
        super(context, theme);
    }

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

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                cancel();
            }
        }, splashTime);

    }
}

Tata letak:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/white">

    <ImageView
        android:id="@+id/splashscreen"
        android:layout_width="190dp"
        android:layout_height="190dp"
        android:background="@drawable/whistle"
        android:layout_centerInParent="true" />

</RelativeLayout>

Dan mulai:

public class MyActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getIntent().getCategories() != null &&  getIntent().getCategories().contains("android.intent.category.LAUNCHER")) {
            showSplashScreen();
        }
    }

    protected Dialog splashDialog;
    protected void showSplashScreen() {
        splashDialog = new SplashDialog(this, R.style.SplashScreen);
        splashDialog.show();
    }

    ...
}
tse
sumber
Ada penerima manfaat untuk pendekatan ini dan itu adalah Anda dapat meluncurkan MainActivity secara langsung. Misalnya ketika Anda menggunakan pemberitahuan push di aplikasi Anda, ketika Anda meluncurkan ke aplikasi Anda dengan mengklik pemberitahuan, dengan cara ini Anda dapat mengelola dengan lebih baik tujuan pemberitahuan.
Farnad Tohidkhah
2

Pendekatan lain dicapai dengan menggunakan CountDownTimer

@Override
public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.splashscreen);

 new CountDownTimer(5000, 1000) { //5 seconds
      public void onTick(long millisUntilFinished) {
          mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
      }

     public void onFinish() {
          startActivity(new Intent(SplashActivity.this, MainActivity.class));
          finish();
     }

  }.start();
}
ugur
sumber
2
     - Add in SplashActivity 

   public class SplashActivity extends Activity {

       private ProgressBar progressBar;
       int i=0;
       Context context;
       private GoogleApiClient googleApiClient;

       @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_splash);
           context = this;

           new Handler().postDelayed(new Runnable() {
               @Override
               public void run() {
                   startActivity(new Intent(Splash.this, LoginActivity.class));
                   finish();
               }
           }, 2000);

       }

   }

  - Add in activity_splash.xml

   <RelativeLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       xmlns:custom="http://schemas.android.com/apk/res-auto"
       android:background="@color/colorAccent"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       tools:context=".Splash">

       <ImageView
           android:id="@+id/ivLogo"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:src="@mipmap/icon_splash"
           android:layout_centerHorizontal="true"
           android:layout_centerVertical="true"/>


       <ProgressBar
           android:id="@+id/circle_progress"
           style="?android:attr/progressBarStyleHorizontal"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:layout_alignParentBottom="true"
           android:layout_marginBottom="5dp"
           android:max="100"
           android:progressTint="@color/green"
           android:visibility="visible" />

   </RelativeLayout>

  - Add in AndroidManifest.xml

    <activity android:name="ex.com.SplashActivity">
               <intent-filter>
                   <action android:name="android.intent.action.MAIN" />

                   <category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
           </activity>
Ashish Kumar
sumber
Bisakah Anda menambahkan beberapa penjelasan?
Robert
Ya tentu ... penjelasan apa yang Anda inginkan, beri tahu saya.
Ashish Kumar
2

Sangat mudah & pendekatan gr8:

Nikmati!

Ada cukup banyak jawaban di sini yang akan membantu implementasi. posting ini dimaksudkan untuk membantu orang lain dengan langkah pertama membuat layar splash!

jony89
sumber
1

Bagaimana dengan layar peluncuran super fleksibel yang dapat menggunakan kode yang sama dan ditentukan di AndroidManifest.xml, sehingga kode tidak perlu diubah. Saya biasanya mengembangkan pustaka kode dan tidak suka mengkustomisasi kode karena ceroboh.

<activity
        android:name=".SplashActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data android:name="launch_class" android:value="com.mypackage.MyFirstActivity" />
        <meta-data android:name="duration" android:value="5000" />
</activity>

Kemudian SpashActivity sendiri mencari meta-data untuk "launch_class" untuk kemudian membuat Intent itu sendiri. "Durasi" data meta menentukan berapa lama layar splash tetap.

public class SplashActivity extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.activity_splash);

    ComponentName componentName = new ComponentName(this, this.getClass());

    try {
        Bundle bundle = null;
        bundle = getPackageManager().getActivityInfo(componentName, PackageManager.GET_META_DATA).metaData;
        String launch_class = bundle.getString("launch_class");
        //default of 2 seconds, otherwise defined in manifest
        int duration = bundle.getInt("duration", 2000);

        if(launch_class != null) {
            try {
                final Class<?> c = Class.forName(launch_class);

                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Intent intent = new Intent(SplashActivity.this, c);
                        startActivity(intent);
                        finish();
                    }
                }, duration);

            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
  }
}
Joel Teply
sumber
1

Kadang-kadang pengguna membuka SplashActivitydan berhenti segera tetapi aplikasi masih MainActivitymengejar SPLASH_SCREEN_DISPLAY_LENGTH.

Untuk mencegahnya: SplashActivityAnda harus memeriksa apakah SplashActivitysudah selesai atau belum sebelum pindah keMainActivity

public class SplashActivity extends Activity {

    private final int SPLASH_SCREEN_DISPLAY_LENGTH = 2000;

    @Override
    public void onCreate(Bundle icicle) {
        ...
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {

                if (!isFinishing()) {//isFinishing(): If the activity is finishing, returns true; else returns false.
                    startActivity(new Intent(SplashActivity.this, MainActivity.class));
                    finish();
                }

            }, SPLASH_SCREEN_DISPLAY_LENGTH);
        }                             
   }                                
}

Semoga bantuan ini

Phan Van Linh
sumber
1

Meskipun ada jawaban yang bagus, saya akan menunjukkan cara yang disarankan google:

1) Pertama buat Themelayar splash: Anda memiliki tema yang disebut splashscreenTheme, tema peluncur Anda akan:

<style name="splashscreenTheme">
  <item name="android:windowBackground">@drawable/launch_screen</item>
</style>

catatan:

android:windowBackgroundsudah menetapkan gambar splashscreen Anda tidak
perlu melakukan ini di UI lagi.

Anda juga bisa menggunakan warna di sini alih-alih yang bisa digambar.

2) Atur tema untuk memanifestasikan splashscreenActivity

   <activity
            android:name=".activity.splashscreenActivity"
            android:screenOrientation="portrait"
            android:theme="@style/splashscreenTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

3) pastikan Anda launch_screen drawabletidak ada dalam drawablefolder jika gambar Anda tidak kecil.

Ini akan menghasilkan lebih cepat memulai layar mulai dan menyelamatkan Anda dari layar hitam

Ini juga menghindari penarikan berlebih

ColdFusion
sumber
1

Ini adalah pos terbaik yang pernah saya lihat di layar splash: http://saulmm.github.io/avoding-android-cold-starts

Saúl Molinero menggunakan dua opsi berbeda untuk splash screen: Manfaatkan latar belakang jendela untuk menghidupkan layar awal Anda dan menampilkan UI placeholder (yang merupakan pilihan populer yang digunakan Google untuk sebagian besar aplikasi mereka hari ini).

Saya merujuk posting ini setiap kali saya perlu mempertimbangkan waktu mulai dingin dan menghindari dropoff pengguna karena waktu startup yang lama.

Semoga ini membantu!

w3bshark
sumber
1

Dalam kasus saya, saya tidak ingin membuat Aktivitas baru hanya untuk menampilkan gambar selama 2 detik. Saat memulai MainAvtivity, gambar dimuat ke pemegang menggunakan picasso, saya tahu ini membutuhkan waktu sekitar 1 detik untuk memuat jadi saya memutuskan untuk melakukan hal berikut di dalam MainActivity saya OnCreate:

splashImage = (ImageView) findViewById(R.id.spllll);

    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

    int secondsDelayed = 1;
    new Handler().postDelayed(new Runnable() {
        public void run() {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            splashImage.setVisibility(View.GONE);

        }
    }, secondsDelayed * 2000);

Ketika memulai aplikasi, hal pertama yang terjadi adalah ImageViewditampilkan dan statusBar dihapus dengan mengatur bendera jendela ke layar penuh. Lalu saya menggunakan a Handleruntuk menjalankan selama 2 detik, setelah 2 detik saya menghapus bendera layar penuh dan mengatur visibilitas ImageViewke GONE. Mudah, sederhana, efektif.

Kelas A
sumber
1

Sangat sederhana di android kami hanya menggunakan konsep handler untuk mengimplementasikan splash screen

Di file java SplashScreenActivity Anda rekatkan kode ini.

Dalam file xml SplashScreenActivity Anda, letakkan gambar apa pun menggunakan imageview.

public void LoadScreen() {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {                 
                Intent i = new Intent(SplashScreenActivity.this, AgilanbuGameOptionsActivity.class);
                startActivity(i);
            }
        }, 2000);
    }
Agilanbu
sumber
1

Anda dapat menambahkan ini di Metode onCreate Anda

new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    // going to next activity
                    Intent i=new Intent(SplashScreenActivity.this,MainActivity.class);
                    startActivity(i);
                    finish();
                }
            },time);

Dan inisialisasi nilai waktu Anda dalam milidetik seperti yang Anda inginkan ...

private  static int time=5000;

untuk lebih detail unduh kode lengkap dari tautan ini ...

https://github.com/Mr-Perfectt/Splash-Screen

Ankit Singh
sumber
1

Di Kotlin tulis kode ini: -

 Handler().postDelayed({
            val mainIntent = Intent(this@SplashActivity, LoginActivity::class.java)
            startActivity(mainIntent)
            finish()
        }, 500)

Semoga ini bisa membantu Anda. Terima kasih ........

Rahul Kushwaha
sumber
0

Kode Sederhana, berfungsi :) Percikan sederhana

int secondsDelayed = 1;
    new Handler().postDelayed(new Runnable() {
        public void run() {
            startActivity(new Intent(LoginSuccessFull.this, LoginActivity.class));
            finish();
        }
    }, secondsDelayed * 1500);
Agilanbu
sumber
0
public class SplashActivity extends Activity {

  Context ctx;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      ctx = this;
      setContentView(R.layout.activity_splash);

      Thread thread = new Thread(){
          public void run(){
              try {
                  sleep(3000);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }

              Intent in = new Intent(ctx,MainActivity.class);
              startActivity(in);
              finish();
          }
      };
      thread.start();
  }
}
Rishabh Dixit
sumber
Ini adalah contoh buruk - apa yang terjadi jika Anda keluar dari SplashActivity dengan menekan kembali? Utas masih akan dijalankan.
Mark Keen