Açılış ekranını nasıl yaparım?


548

Uygulamamın daha profesyonel görünmesini istedim, bu yüzden bir açılış ekranı yapmaya karar verdim.

Nasıl yaratıp sonra uygularım?


58
Bir uygulama neden açılış ekranı kullanarak daha profesyonel görünüyor? Ben bir tane 'profesyonel' android uygulaması biliyorum.
theomega

7
@Theomega ile aynı fikirde. Splash ekranlar sadece can sıkıcı.
Matt Ball

85
Açılış ekranını yalnızca arka plan yükleme işiniz varsa göstermelisiniz. Aksi takdirde, kullanıcıya uygulamanızdan istediklerini mümkün olan en kısa sürede verdiğinizde uygulamanız daha "profesyonel" görünür. Kullanıcılar 100 ms'den fazla gecikmeleri fark eder (ve bunlardan rahatsız olurlar) ve bir açılış ekranı ekleyerek bu eşiğin üstünde bir büyüklük sırasısınız.
CodeFusionMobile

74
kindle uygulaması, aldiko (okuyucu), yunus .. OS Umm :) Hepsi bir sıçrama var. Opera Mobile, Mantan Okuyucu, Haritalar. Devam edebilirdim. Bir yükü gizlerse, en azından kullanıcıya uygulamanızın başladığını bildirir. Ekranda en az bir şey olduğunda birkaç saniyelik bir gecikme daha iyi gizlenir.
baash05

9
Açılış ekranı size ve oyun veya uygulama şirketinizin adını veya logosunu tanıtmak için mükemmel bir fırsat sunar. Açılış ekranını tıklanabilir hale getirmeyi seviyorum, böylece kullanıcı oyuna devam etme seçeneğine sahip. Kullanıcı, uygulamanızı her açtığında şirketinizin logosunu her zaman bile yarım saniye görürse, kim olduğunuzu hatırlama olasılığı daha yüksektir. Sadece uygulamanızla iyi bir deneyim yaşadıklarından emin olun.
Chamatake-san

Yanıtlar:


509

Daha fazla okuma:

Eski cevap:

NASIL YAPILIR : Basit açılış ekranı

Bu cevaplar, örneğin markalama nedenleriyle uygulamanız başladığında belirli bir süre için açılış ekranının nasıl görüntüleneceğini gösterir. Örneğin, açılış ekranını 3 saniye boyunca göstermeyi seçebilirsiniz. Ancak, spash ekranını değişken bir süre için göstermek istiyorsanız (örn. Uygulama başlangıç ​​zamanı) Abdullah'ın cevabını https://stackoverflow.com/a/15832037/401025 kontrol etmelisiniz . Bununla birlikte, uygulamanın yeni cihazlarda çok hızlı olabileceğini unutmayın, böylece kullanıcı sadece kötü UX olan bir flaş görür.

Öncelikle layout.xmldosyanızdaki spash ekranını tanımlamanız gerekir

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

Ve faaliyetiniz:

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);
    }
}

Bu kadar ;)


3
@ user2606414 Lütfen SO için bir soru oluşturun, tüm hata günlüğünüzü yapıştırın.
Olumlu oy

39
Manifest'te sıçrama eklemeyi unutmayın
Jawad Zeb

8
@Soru, veri yüklenirken açılış ekranının nasıl gösterileceği değildir.
Olumlu oy

18
Bu, bir açılış ekranı için uygun bir çözüm değildir, kullanıcının bir açılış ekranı göstermek için beklemesini sağlar, ancak açılış ekranının amacı tam tersidir. Kullanıcı beklerken bir açılış ekranı göstermelidir. Lütfen @ Abdullah'ın çözümüne bakınız.
efeyc

4
SPLASH_DISPLAY_LENGTHZaman için uygulamayı durdurmak yerine . Bunun yerine şunu yapmalısınız
miguel.martin

595

Bu çözümün kullanıcının daha fazla beklemesine izin vermeyeceğini unutmayın: açılış ekranının gecikmesi uygulamanın başlangıç ​​zamanına bağlıdır.

Herhangi bir android uygulamasını açtığınızda, varsayılan olarak üstte uygulamanın başlığı ve simgesi olan ne siyah bir ekran alırsınız, bir stil / tema kullanarak bunu değiştirebilirsiniz.

İlk olarak, değerler klasöründe bir style.xml dosyası oluşturun ve bu klasöre bir stil ekleyin.

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

Kullanmak yerine @android:style/Theme.DeviceDefault.Light.NoActionBarbaşka bir temayı üst öğe olarak kullanabilirsiniz.

İkinci olarak, uygulamanızda Manifest.xml android:theme="@style/splashScreenTheme"ana faaliyetinize ekleyin .

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

Üçüncü olarak, temanızı onCreate () başlatma etkinliğinizde güncelleyin.

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

GÜNCELLEME Bu gönderiye göz atın .

@ Mat1h ve @adelriosantiago sayesinde


3
Görünüşe göre "üst
öğe

103
Açılış ekranı yapmanın doğru yolu budur. Teşekkürler! Gecikme ile daha fazla oyla cevap sadece kötü bir uygulamadır. Hiçbir şey kullanıcıyı ilk fonksiyonel ekranı görmekten alıkoymamalıdır.
dineth

7
Bununla ilgili bir sorun <item name="android:background">, geçersiz kılmak olduğunu windowBackground. Ve android:backgroundtanımlanmadan, herhangi bir parçadaki arka planım, ön plan içeriğinin arkasındaki etkinliği ortaya çıkarmak için şeffaf olacaktır.
William Grand

4
@Abdullah: Söylediğin şekilde takip ettim. İyi çalışıyor, ancak açılış ekranı etkinlik geçişlerinde birkaç milisaniye boyunca görünüyor.
nizam.sp

3
@Abdullah Teşekkürler! Bu olası bir çözüm olurdu, ancak bunu buldum: plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd , her ekran boyutu için farklı görüntüler oluşturmaktan kaçınmak için görüntüyü içeren bir XML oluşturmak da mümkündür tüm ekranlarda iyi.
adelriosantiago

52
  • Etkinlik oluşturma: Sıçrama
  • Düzen XML dosyası oluşturma: splash.xml
  • Kullanıcı arabirimi bileşenlerini splash.xml düzenine yerleştirin, böylece istediğiniz gibi görünür
  • Splash.java'nız şöyle görünebilir:

    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);
        }
    }
  • ActivityB.classaçılış ekranından sonra başlatmak istediğiniz etkinliğe değiştirin

  • manifest dosyanızı kontrol edin ve şöyle görünmelidir

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

28
Açılış ekranının amacı bu değildir. Bu ekstra 1 saniye gecikme yapar. Açılış ekranı, uygulamanın ilk ekranı yüklenirken bir görüntü olmalıdır. Bu bağlantı yardımcı olabilir. stackoverflow.com/a/7057332/869451
efeyc

2
@efeyc:% 100 haklısın ... yine de uygulama başladığında çok hoş görünüyor .. düşünmüyor musun?
McLan

1
@ Suda.nese kesinlikle değil. Kullanıcılar bir resme bakmak istemiyor, kullanıcılar uygulamayı kullanmak istiyor ve gereksiz bir gecikmeye sahip değiller
Tim

1
@TimCastelijns Bu geliştirme aşamasında app bağlıdır ve açılış ekranı neye benziyor .. tabii ki pratik olması gerekiyordu, ama başka türlü kullanılamaz diyor kim !!
McLan

6
Agreed @ Suda.nese Uygulama gereksinimleri bir açılış ekranı içeriyorsa, bir açılış ekranından daha fazladır! Tabii, kullanıcılar için arzu edilmeyebilir, ancak bir müşteri bir açılış ekranı isterse, o zaman gosh tarafından onlara verin
james

29

Yukarıdaki cevaplar çok iyi, ama başka bir şey daha eklemek istiyorum. Android'de yeniyim, gelişimim sırasında bu sorunla karşılaştım. Umarım bu benim gibi birine yardımcı olabilir.

  1. Açılış ekranı, uygulamamın giriş noktasıdır, bu nedenle AndroidManifest.xml dosyasına aşağıdaki satırları ekleyin.

        <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. Açılış ekranı uygulama yaşam döngüsünde yalnızca bir kez gösterilmelidir, açılış ekranının durumunu kaydetmek için bir boole değişkeni kullanıyorum ve sadece ilk kez göstereceğim.

    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();
            }
        }
    }

mutlu kodlama!


10
Ekleyebilir android:noHistory="true"içinde AndroidManifest.xmlgeri düğmesini kullanarak giriş ekranı için geri gitmekten kullanıcıyı engellemek için.
Rachel

15

Abdullah'ın cevabı harika. Ama cevabımla biraz daha detay eklemek istiyorum.

Açılış Ekranı Uygulama

Açılış ekranını doğru şekilde uygulamak hayal edebileceğinizden biraz farklıdır. Açılış etkinliğinizde bir düzen dosyasını şişirebilmeniz için bile gördüğünüz açılış görünümü hemen hazır olmalıdır.

Böylece bir düzen dosyası kullanmayacaksınız. Bunun yerine, açılış ekranınızın arka planını etkinliğin tema arka planı olarak belirtin. Bunu yapmak için, önce res / drawable içinde çizilebilir bir XML oluşturun.

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>

Sadece arka plan rengi ile logo ile bir katman listesi.

Şimdi styles.xml dosyasını açın ve bu stili ekleyin

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

Bu temanın yukarıda oluşturduğumuz eylem çubuğuna ve arka plana sahip olması gerekir.

Ve manifest'te SplashTheme'i sıçrama olarak kullanmak istediğiniz etkinliğe ayarlamanız gerekir.

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

Ardından etkinlik kodunuzun içinde, amacı kullanarak açılıştan sonra kullanıcıyı belirli bir ekrana yönlendirin.

public class SplashActivity extends AppCompatActivity {

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

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

Bunu yapmanın doğru yolu bu. Bu referansları cevap için kullandım.

  1. https://material.google.com/patterns/launch-screens.html
  2. https://www.bignerdranch.com/blog/splash-screens-the-right-way/ Beni doğru yöne ittiği için bu adamlara teşekkürler. Başkalarına yardım etmek istiyorum çünkü kabul edilen cevap açılış ekranı yapmak için tavsiye edilmiyor.

1
Bununla YouTubeilgili bir eğitim gördüm . Ancak bitmap boyutunun sorun olacağını düşünüyorum çünkü kullanarak yeniden boyutlandıramazsınız layer-list.
RoCk RoCk

14
  1. Oluşturduğunuz bir 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 böyle olacak

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

13

Splash Screnn, varsayılan olarak Uygulamanızın otomatik olarak daha profesyonel görünmesini sağlamaz. Profesyonelce tasarlanmış bir Açılış Ekranı, Uygulamanızı daha profesyonel hale getirme olasılığına sahiptir, ancak nasıl yazılacağını bilmiyorsanız, Uygulamanızın geri kalanı ne kadar profesyonel olacaktır.

Açılış Ekranına sahip olmanın tek nedeni (Bahane), Uygulamanızın başlamadan önce buna bağlı olması nedeniyle büyük miktarda Hesaplama yapmanız veya GPS / WiFi'nin başlamasını beklemenizdir. Bu Hesaplamalar veya GPS / WiFi (vb.) Erişimi olmadan Uygulamanız suda öldü, bu nedenle bir Splash Screen'e ihtiyacınız olduğunu hissediyorsunuz ve diğer çalışan Programlar (Arka Plan dahil) için Ekranın görünümünü engellemeniz GEREKİR ).

Böyle bir Açılış Ekranı, zaten başlatıldığı izlenimini vermek için Tam Ekran Uygulamanıza benzemelidir, daha sonra uzun hesaplamalar tamamlandıktan sonra nihai ayrıntılar doldurulabilir (Görüntü düzeltildi). Bu durumda olma veya Programın tasarlanabilmesinin tek yolu olma şansı çok azdır .

Kullanıcının (ve işletim sisteminin geri kalanının), Programınızı biraz zaman alacak bir şeye (beklemenin süresi belirsiz olduğunda) bağımlı olacak şekilde tasarlamak yerine, beklerken başka bir şey yapmasına izin vermek daha iyi olacaktır.

Telefonunuzda zaten GPS / WiFi'nin başladığını söyleyen Simgeler var. Açılış Ekranı tarafından harcanan zaman veya alan, ön hesaplamaları yüklemek veya aslında Hesaplamaları yapmak için harcanabilir. Oluşturduğunuz sorunlar ve nelere dikkat edilmesi gerektiği konusunda aşağıdaki ilk Bağlantıya bakın.

Bu Hesaplamaları veya GPS / WiFi'yi kesinlikle beklemeniz gerekiyorsa, Uygulamanın başlamasına izin vermek ve Hesaplamaları beklemenin gerekli olduğunu belirten bir pop-up'a sahip olmak en iyisi olacaktır (TEKSTİL "Başlatılıyor" Mesajı iyidir). GPS / WiFi için bekleme bekleniyor (zaten başka bir Programda etkinleştirilmemişlerse), bu nedenle bekleme sürelerini bildirmek gereksizdir.

Açılış Ekranı başladığında, Programınız zaten zaten çalışıyorsa, tek yaptığınız Programınızın kullanımını geciktirmek ve CPU / GPU'yu en fazla gerekli olmayan bir şey yapmak için zorlamaktır.

Programınızı her başlattığımızda gerçekten Splash Screen'inizi beklemek ve görmek istersek daha iyi olur ya da BİZ profesyonelce yazıldığını hissetmeyiz. Açılış Ekranını DOLU Ekran ve gerçek Programın Ekranının bir kopyası yapmak (aslında olmadığında başlatıldığını düşünüyoruz) hedefinize ulaşabilir (Programınızın daha profesyonel görünmesini sağlamak) ama bunun üzerine çok fazla bahis oynamam.

Neden yapmıyorsunuz: http://cyrilmottier.com/2012/05/03/splash-screens-are-evil-dont-use-them/

Nasıl yapılır: https://encrypted.google.com/search?q=Android+splash+screen+source

Bu yüzden bunu yapmamak için iyi bir neden var, ancak durumunuzun bir şekilde bu örneklerin dışında kaldığından eminseniz, bunu yapmanın yolu yukarıda verilmiştir. Uygulamanızın daha profesyonel görünmesini sağladığından veya bunu yapmak için verdiğiniz tek nedeni yendiğinizden emin olun.

Her Videoyu uzun bir Grafik Girişiyle (ve Outro'yla) başlatan veya geçen hafta boyunca (Komedi veya LifeStyles Kanalı olmadığında) bir Şaka söyleme veya ne olduğunu açıklama ihtiyacı hisseden bir YouTube Kanalı gibidir. Sadece şovu göster! (Sadece Programı çalıştırın).


12

Her şeyden önce cevaplar gerçekten çok iyi. Ancak bellek sızıntısıyla karşılaşma sorunu var. Bu sorun genellikle Android topluluğunda "Etkinlik Sızdırma" olarak bilinir . Şimdi bu tam olarak ne anlama geliyor?

Yönlendirme değişikliği gibi yapılandırma değişikliği meydana geldiğinde Android, Etkinliği yok eder ve yeniden oluşturur. Normalde, Çöp Toplayıcı eski Etkinlik örneğinin ayrılan belleğini temizler ve hepimiz iyiyiz.

"Bir Etkinliği Sızdırmak" , Çöp Toplayıcı'nın eski Etkinlik örneğinin ayrılan belleğini, Etkinlik örneğini being (strong) referencedyaşayan bir nesneden temizleyemediği durum anlamına gelir . Her Android uygulamasının kendisine ayrılan belirli bir belleği vardır. Çöp Toplayıcı kullanılmayan belleği boşaltamazsa, uygulamanın performansı yavaş yavaş azalacak ve sonunda OutOfMemoryhata ile çökecektir.

Uygulamanın bellek sızdırıp sızdırmadığını nasıl belirleyebilirim? En hızlı yol, Android Studio'da Bellek sekmesini açmak ve yönlendirmeyi değiştirirken ayrılan belleğe dikkat etmektir. Ayrılan bellek artmaya devam ederse ve asla azalmazsa, bellek sızıntısı olur.

1. kullanıcı yönünü değiştirdiğinde hafıza sızıntısı. resim açıklamasını buraya girin

Öncelikle düzen kaynak splashscreen.xmldosyanızdaki açılış ekranını tanımlamanız gerekir

Açılış ekranı etkinliği için örnek kod.

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

Daha fazla bilgi için lütfen bu bağlantıyı inceleyin


7

Sıçrama ekranında 4'lerin 5'leri durdurmak gereksizdir. Arka planda başka bir şey yüklüyorsanız, açılış ekranını uygulamak için bu yaklaşımı izleyin: - Açılış ekranını doğru şekilde uygulamak hayal edebileceğinizden biraz farklıdır. Açılış etkinliğinizde bir düzen dosyasını şişirebilmeniz için bile gördüğünüz açılış görünümü hemen hazır olmalıdır.

Böylece bir düzen dosyası kullanmayacaksınız. Bunun yerine, açılış ekranınızın arka planını etkinliğin tema arka planı olarak belirtin. Bunu yapmak için, önce res / drawable içinde çizilebilir bir XML 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>

Burada bir arka plan rengi ve görüntü ayarladım.

Daha sonra, bunu açılış etkinliğinizin temada 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'inizde, pencere arka plan özniteliğini XML'nizin çekilebilir olarak ayarlayın. Bunu AndroidManifest.xml dosyasında 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>

Son olarak, SplashActivity sınıfı sizi ana etkinliğinize yönlendirmelidir:

     public class SplashActivity extends AppCompatActivity {

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

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

Daha fazla ayrıntı bunu okuyun: 1. https://www.bignerdranch.com/blog/splash-screens-the-right-way/ 2. http://blog.goodbarber.com/3-tips-to-create-a -büyük-sıçrama ekran-for-your-mobil-app_a287.html


4

Buradaki kodun tamamı

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);
}}

Çekmecelerde bu bg_splash.xml dosyasını oluşturun

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

Gelen styles.xml özel bir tema oluşturmak

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

ve son olarak AndroidManifest.xml dosyasında etkinliğiniz için temayı belirtin

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

Şerefe.


Nasıl xml dosyası eklemek istiyorumdrawable
engerek

Yani yukarıda açıklandığı gibi çizilebilir dizinde bg_splash.xml oluşturmanız gerekecek.
awsleiman

4

Açılış ekranları bir mizanpaj dosyasından yüklenmemelidir, yüklenirken hala biraz gecikme olabilir.

En iyi yol, yalnızca SplashScreenActivity'niz için bir Tema oluşturmak ve the android:windowBackgroundçekilebilir bir kaynağa ayarlamaktır .

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

Kısaca:

Manifest'te SplashScreenActivity'nizi bildirin:

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

SplashScreenActivity.java'nızda:

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

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

}

Ardından temanızın arka plan penceresi için kaynak oluşturun:

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

Çekilebilir dosya splash.xml:

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

4

Android Marshmallow'dan sonra , düşündüğüm diğer Splash ekranının Verimli kullanımı, uygulamanızın açılış ekranında gerekliAndroid Permissions olmasını istiyor .

uygulamaların çoğunun izin isteğini bu şekilde ele aldığı görülüyor.

  • İletişim kutuları kötü UIX yapar ve ana akışı keser ve çalışma zamanında karar vermenizi sağlar ve gerçek şu ki, çoğu kullanıcı uygulamanız SD karta bir şey yazmak istiyorsa bile umursamayabilir. Bazıları, onu düz ingilizce tercüme edene kadar ne aktarmaya çalıştığımızı bile anlamayabilir.

  • Bir seferde izin istemek, her işlemden önce daha az sayıda "if" olursa ve kodunuzun dağınık görünmesini sağlar.

Bu, Android OS 23+ çalıştıran cihaz için açılış etkinliğinizde nasıl izin isteyebileceğinizi gösteren bir örnektir.

Tüm izinler verildiyse VEYA zaten verildiyse VEYA uygulaması Pre Marshmallow'da çalışıyor SONRA sadece kullanıcılara bu soruyu okuma ve elimizden gelenin en iyisini yapmaya çalıştığımız çabayı takdir edebilmeleri için ana içerikleri sadece yarım saniyelik bir gecikmeyle görüntüleyin.

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);
    }


}

4

bir düzen dosyası kullanmayacaksınız. Bunun yerine, açılış ekranınızın arka planını etkinliğin tema arka planı olarak belirtin. Bunu yapmak için, önce res / drawable içinde çizilebilir bir XML oluşturun.

Not: aşağıdaki tüm kodlar kullanılabilir GitHub Link

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

Burada bir arka plan rengi ve görüntü ayarladım.

Daha sonra, bunu açılış etkinliğinizin temada 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'inizde, pencere arka plan özniteliğini XML'nizin çekilebilir olarak ayarlayın. Bunu AndroidManifest.xml dosyasında 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>

Son olarak, SplashActivity sınıfınız sizi ana etkinliğinize yönlendirmelidir:

public class SplashActivity extends AppCompatActivity {

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

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

Bu SplashActivity için bir görünüm bile ayarlamadığınıza dikkat edin. Görünüm temadan geliyor. Temadaki sıçrama etkinliğiniz için kullanıcı arayüzünü ayarladığınızda, hemen kullanılabilir.

Açılış etkinliğiniz için bir düzen dosyanız varsa, bu düzen dosyası yalnızca uygulamanız tamamen başlatıldıktan sonra çok geç olan kullanıcı tarafından görülebilir. Sıçramaların yalnızca uygulama başlatılmadan önce çok az bir sürede görüntülenmesini istiyorsunuz.


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();
}

2

Bir Etkinlik oluşturun, 'A' adlı Etkinliği bize bırakın, ardından myscreen.xml adlı bir xml dosyası oluşturun, bu dosyada bir açılış ekranı görüntüsünü arka plan olarak ayarlayın ve sonra bir Etkinlikten diğerine gitmek için geri sayım sayacını kullanın. Geri Sayım sayacını nasıl kullanacağınızı öğrenmek için bu soruya cevabımı TimerTask Android'de görebilirsiniz?


2

Açılış ekranı örneği:

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

    }

}

2

Açılış ekranı Android'de biraz kullanılamaz bir nesnedir: ana faaliyetin başlamasının gecikmesini gizlemek için mümkün olan en kısa sürede yüklenemez. Bunu kullanmanın iki nedeni vardır: reklam ve ağ işlemleri.

Diyalog olarak uygulama, açılış ekranından ana faaliyet arayüzüne gecikmeden atlama yapar.

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

    }
}

Yerleşim:

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

Ve başla:

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();
    }

    ...
}

Bu yaklaşım için bir faydalanıcı vardır ve bu da MainActivity'yi doğrudan başlatabilirsiniz. Örneğin, uygulamanızda push bildirimi kullandığınızda, bildirimi tıklayarak uygulamanızı başlattığınızda, bildirim amaçlarını daha iyi yönetebilirsiniz.
Farnad Tohidkhah

2

Başka bir yaklaşım CountDownTimer kullanılarak elde edilir

@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();
}

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>

Lütfen biraz açıklama ekleyebilir misiniz?
Robert

Evet eminim ... ne gibi bir açıklama istiyorsan lütfen bana bildir.
Ashish Kumar

2

Gerçekten kolay ve gr8 yaklaşımı:

Zevk almak!

Burada uygulamaya yardımcı olacak yeterli cevap var. bu yazı, açılış ekranını oluşturmanın ilk adımında başkalarına yardımcı olmayı amaçlıyordu!


1

Aynı kodu kullanabilen ve AndroidManifest.xml'de tanımlanan süper esnek bir başlatma ekranına ne dersiniz, bu yüzden kodun asla değişmesi gerekmeyecek. Ben genellikle kod kütüphaneleri geliştirmek ve özensiz olduğundan kodu özelleştirme sevmiyorum.

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

Daha sonra SpashActivity'nin kendisi "Launch_class" meta verisini arar ve sonra da Niyet'i kendisi yapar. Meta veri "süresi", açılış ekranının ne kadar kalacağını tanımlar.

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();
    }
  }
}

1

Bazen kullanıcı açmak SplashActivityve hemen çıkın ancak uygulama halen gidin MainActivitysonra SPLASH_SCREEN_DISPLAY_LENGTH.

Bunu önlemek için: içinde taşımadan önce bitmiş olup olmadığını SplashActivitykontrol etmelisinizSplashActivityMainActivity

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);
        }                             
   }                                
}

Umarım bu yardım


1

İyi cevaplar olmasına rağmen, google'ın önerilen yolunu göstereceğim:

1) İlk Themeolarak açılış ekranı oluşturun: adlı bir temanız var splashscreenTheme, başlatıcı temanız şöyle olacaktır:

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

Not:

android:windowBackgroundaçılış ekranı görüntünüzü zaten
UI'de tekrar yapmaya gerek yok.

burada çekilebilir yerine renk de kullanabilirsiniz.

2) Temayı, açılış ekranının tezahürüne ayarlayın

   <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) emin olun launch_screen drawabledeğil drawableresminizin küçük değilse klasörde.

Daha hızlı başlatma ekranının başlatılmasına ve sizi siyah ekrandan kurtarmanıza neden olur

Ayrıca ekstra fazla çekilmeyi önler


1

Bu, açılış ekranlarında gördüğüm en iyi gönderi: http://saulmm.github.io/avoding-android-cold-starts

Saúl Molinero, açılış ekranları için iki farklı seçeneğe gider: Başlangıç ​​ekranınıza animasyon uygulamak için pencere arka planından yararlanma ve yer tutucu kullanıcı arayüzünü görüntüleme (Google'ın bu günlerde uygulamalarının çoğu için kullandığı popüler bir seçimdir).

Her seferinde soğuk başlangıç ​​zamanını düşünmem ve uzun başlatma süreleri nedeniyle kullanıcının terk etmesini önlemem gerektiğinde bu gönderiye başvuruyorum.

Bu yardımcı olur umarım!


1

Benim durumumda, sadece 2 saniye boyunca bir görüntü göstermek için yeni bir Etkinlik oluşturmak istemedim. Başlarken MainAvtivity, resimler picasso kullanarak tutuculara yüklenir, bunun yüklenmesi yaklaşık 1 saniye sürer, bu yüzden MainActivity'mde aşağıdakileri yapmaya karar verdim 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);

Uygulama başlatılırken gerçekleşen ilk şey ImageView, pencere bayraklarını tam ekrana ayarlayarak görüntülenen ve statusBar öğelerinin kaldırılmasıdır. Sonra bir kullanılmış Handler, 2 saniye daha çalışmaya 2 saniye sonra tam ekran bayrakları temizlemek ve görünürlüğünü ayarlamak ImageViewiçin GONE. Kolay, basit, etkili.


1

Android'de gerçekten basit, sadece açılış ekranını uygulamak için işleyici kavramını kullanıyoruz

Senin içinde SplashScreenActivity java dosyasına bu kodu yapıştırın.

Senin içinde SplashScreenActivity xml dosyasında ImageView kullanarak herhangi bir resim koydu.

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);
    }

1

Bunu onCreate Yönteminize ekleyebilirsiniz

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

Ve zaman değerinizi istediğiniz gibi milisaniye olarak başlatın ...

private  static int time=5000;

daha fazla ayrıntı için bu linkten tam kodu indirin ...

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


1

Kotlin'de bu kodu yazın: -

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

Umarım bu size yardımcı olacaktır.Teşekkürler ........


0

Basit Kod, işe yarıyor :) Basit sıçrama

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

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();
  }
}

Bu kötü bir örnektir - SplashActivity'den geri basarak çıkarsanız ne olur? İş parçacığı yine de yürütülür.
Mark Keen
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.