Як зробити екран заставки?


548

Я хотів зробити свою програму більш професійною, тому вирішив, що хочу зробити заставку.

Як би я його створив і потім реалізував?


58
Чому додаток виглядає більш професійно за допомогою екрана заставки? Я не знаю жодного "професійного" додатка для Android, який отримав би його.
theomega

7
Погоджено з @theomega. Екрани сплеску просто дратують.
Метт Бал

85
Показувати екран заставки слід, лише якщо у вас є робота з завантаження фону. Інакше ваш додаток виглядає більш "професійним", коли ви якнайшвидше даєте користувачеві, що він хоче від вашої програми. Користувачі помічають (і вас дратують) затримки понад 100 мс, і ви на порядок вище цього порогу, додавши екран заставки.
CodeFusionMobile

74
додаток розпалення, альдіко (читач), дельфін .. Умм ОС :) У них все сплеск. Opera Mobile, Mantan Reader, Карти. Я міг би продовжувати. Якщо він приховує навантаження, то, принаймні, повідомте користувачеві знати, що ваш додаток запущено. Затримка на кілька секунд приховується набагато краще, коли на екрані є хоч щось із вас.
baash05

9
Екран заставки дає вам прекрасну можливість рекламувати назву чи логотип компанії чи програми чи додатків. Мені подобається робити екран за допомогою сплеску, щоб користувач мав можливість пропускатись до гри. Якщо користувач завжди бачить логотип вашої компанії навіть на півсекунди кожного разу, коли вони відкривають вашу програму, вони з більшою ймовірністю запам’ятають, хто ти, чорт, ти. Просто переконайтеся, що вони мають хороший досвід роботи з вашим додатком.
Chamatake-san

Відповіді:


509

Подальше читання:

Стара відповідь:

ЯК : Простий екран

Цей відповідь показує вам, як відображати екран заставки протягом певного часу, коли ваш додаток запускається, наприклад, з брендингових причин. Наприклад, ви можете вибрати екран відображення протягом 3 секунд. Однак якщо ви хочете показати екран екрана протягом певного періоду часу (наприклад, час запуску програми), слід ознайомитися з відповіддю Абдулли https://stackoverflow.com/a/15832037/401025 . Однак майте на увазі, що запуск програми може бути дуже швидким на нових пристроях, тому користувач просто побачить спалах, що погано UX.

Спершу потрібно визначити екран екрана у вашому layout.xmlфайлі

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

І ваша діяльність:

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

Це все ;)


3
@ user2606414, будь ласка, створіть запитання щодо SO, щоб ви вирішили вставити весь журнал помилок.
Оновлення

39
Не забудьте додати сплеск у Manifest
Jawad Zeb

8
@Петер питання не в тому, як відобразити екран заставки під час завантаження даних.
Оновлення

18
Це не належне рішення для екрана заставки, воно змушує користувача чекати, щоб показати екран заставки, однак мета екранізації навпаки. Він повинен показувати екран заставки, поки користувач чекає. Перегляньте рішення @ Abdullah.
efeyc

4
Замість того, щоб застосувати додаток на SPLASH_DISPLAY_LENGTHчас. Ви повинні зробити це замість цього: bignerdranch.com/blog/splash-screens-the-right-way
miguel.martin

595

Зауважте, що це рішення не дасть користувачеві більше чекати: затримка екрана сплеску залежить від часу запуску програми.

Якщо ви відкриєте будь-який додаток для Android, ви отримаєте за замовчуванням якийсь чорний екран із заголовком та піктограмою додатка зверху, ви можете змінити це, використовуючи стиль / тему.

Спочатку створіть style.xml у папці значень та додайте до неї стиль.

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

Замість використання @android:style/Theme.DeviceDefault.Light.NoActionBarви можете використовувати будь-яку іншу тему як батьків.

По-друге, у вашому додатку Manifest.xml додайте android:theme="@style/splashScreenTheme"до своєї основної діяльності.

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

По-третє, оновіть свою тему під час запуску onCreate ().

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

ОНОВЛЕННЯ Перевірте цю публікацію .

Завдяки @ mat1h та @adelriosantiago


3
Здається, що "батьків" підтримується лише в API 14 і вище
користувач1832478

103
Це правильний спосіб зробити заставку. Дякую! Відповідь із більшою кількістю голосів із затримками - лише погана практика. Ніщо не повинно затримувати користувача побачити перший функціональний екран.
dineth

7
Одна з проблем, які у мене виникли, полягає в тому, що <item name="android:background">це перекриє windowBackground. І без android:backgroundвизначення, моє передумови в будь-яких фрагментах було б прозорим, що розкривало б активність за змістом переднього плану.
Вільям Гранд

4
@ Abdullah: Я дотримувався того, як ти сказав. Це добре працює, але екран заставки з'являється на кілька мілісекунд при переходах діяльності.
nizam.sp

3
@Abdullah Дякую! Це було б можливим рішенням, однак я знайшов це: plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd , щоб уникнути створення різних зображень для кожного розміру екрана, також можна створити XML, що містить зображення, щоб воно виглядало штрафу на всіх екранах.
adelriosantiago

52
  • Створіть активність: сплеск
  • Створіть XML-файл макета: splash.xml
  • Покладіть компоненти інтерфейсу в макет splash.xml, щоб він виглядав, як вам потрібно
  • ваш Splash.java може виглядати так:

    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.classна ту діяльність, яку ви хочете розпочати після екрана заставки

  • перевірте свій файл маніфесту і він повинен виглядати так

        <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
Це не мета заставки. Це робить додаткову затримку на 1 секунду. Екран сплеску повинен бути зображенням під час завантаження першого екрана програми. Це посилання може допомогти. stackoverflow.com/a/7057332/869451
efeyc

2
@efeyc: ви на 100% праві .. все ж, це виглядає дуже приємно, коли програма починається .. ви не думаєте?
McLan

1
@ Suda.nese точно не є. Користувачі не хочуть дивитись на картинку, користувачі хочуть користуватися додатком і не мають зайвої затримки
Тім

1
@TimCastelijns Це залежить від програми, що розробляється, і як виглядає екран сплеску .. звичайно, це повинно бути практичним, але хто каже, що його не можна використовувати інакше !!
McLan

6
Погоджено @ Suda.nese Якщо вимоги додатка містять екран заставки, ніж екран для заставки! Звичайно, це може бути не бажано для користувачів, але якщо клієнт хоче екрану заставки, то Gosh передасть їм його
Джеймс

29

Відповіді вище дуже хороші, але я хотів би додати ще щось. Я новачок в Android, я зіткнувся з цією проблемою під час своєї розробки. сподіваюся, що це може допомогти комусь, як я.

  1. Екран Splash - це точка входу мого додатка, тому додайте наступні рядки в 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. Екран сплеску повинен відображатися лише один раз у життєвому циклі програми, я використовую булеву змінну для запису стану екрана сплеску та показую лише в перший раз.

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

щасливе кодування!


10
Ви можете додати android:noHistory="true"в , AndroidManifest.xmlщоб заборонити йому йти назад до заставки з допомогою кнопки назад.
Рейчел

15

Відповідь Абдулли чудова. Але я хочу додати ще кілька деталей до нього зі своєю відповіддю.

Реалізація екрана заставки

Правильна реалізація екрана виплескування дещо інша, ніж ви могли собі уявити. Вигляд сплеску, який ви бачите, повинен бути готовий негайно, навіть до того, як ви зможете надути файл макета під час своєї дії.

Таким чином, ви не будете використовувати файл макета. Замість цього вкажіть фон екрана заставки як фон теми діяльності. Для цього спочатку створіть XML, який можна малювати в Res / Dravable.

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>

Це просто список шарів з логотипом у центрі кольору фону з ним.

Тепер відкрийте styles.xml та додайте цей стиль

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

Цю тему потрібно виконати на панелі дій та з фоном, який ми тільки що створили вище.

І в маніфесті вам потрібно встановити SplashTheme на діяльність, яку ви хочете використовувати як сплеск.

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

Потім всередині коду вашої активності перейдіть до певного екрану користувача, використовуючи наміри.

public class SplashActivity extends AppCompatActivity {

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

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

Це правильний шлях. Ці відповіді я використав для відповіді.

  1. https://material.google.com/patterns/launch-screens.html
  2. https://www.bignerdranch.com/blog/splash-screens-the-right-way/ Завдяки цим хлопцям, що підштовхнули мене до правильного напрямку. Я хочу допомогти іншим, оскільки прийнята відповідь не рекомендується робити екранізацію.

1
Я побачив підручник з YouTubeприводу цього. Але я думаю, що проблема розміру растрових зображень буде проблемою, оскільки ви не можете змінити її розмір за допомогою layer-list.
RoCk RoCk

14
  1. Створіть 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 буде так

    <?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, за замовчуванням, автоматично не робить Вашу програму більш професійною. Професійно розроблений екран Splash має можливість зробити ваш додаток більш професійним, але якщо ви не знаєте, як його написати, то наскільки професійним буде решта вашої програми.

Про єдину причину (виправдання) мати сплеск-екран - це те, що ви робите велику кількість розрахунків або чекаєте запуску GPS / WiFi, тому що ваша програма покладається на це до запуску. Без результату цих розрахунків або доступу до GPS / WiFi (тощо) ваша програма не загинула у воді, тому ви відчуваєте, що вам потрібен екран сплеску, і ОБОВ'ЯЗКОВО блокувати перегляд екрана для будь-яких інших запущених програм (включаючи фон ).

Такий екран сплеску повинен виглядати як ваша програма на весь екран, щоб створити враження, що він вже ініціалізований, після завершення тривалих обчислень можна буде заповнити остаточну інформацію (зображення налаштовано). Шанс того , що бути так чи що це єдиний спосіб , програма може бути розроблена могутній мала .

Було б краще дозволити Користувачеві (і решті ОС) зробити щось інше, поки вони чекають, а не спроектувати вашу Програму залежно від чогось, що займе певний час (коли тривалість очікування невизначена).

На вашому телефоні вже значки, які говорять про те, що запускається GPS / WiFi. Час або простір, зайнятий екраном сплеску, можна витратити на завантаження попередніх розрахунків або фактично на виконання розрахунків. Дивіться перше посилання нижче щодо проблем, які ви створюєте, і що потрібно враховувати.

Якщо ви абсолютно повинні зачекати цих розрахунків або GPS / WiFi, найкраще просто запустити додаток і мати спливаюче вікно, яке говорить про те, що потрібно чекати обчислень (ТЕКСТУАЛЬНЕ повідомлення про ініціалізацію) нормально). Очікується очікування GPS / WiFi (якщо вони вже не були включені в іншій програмі), тому оголошення про час очікування не потрібні.

Пам’ятайте, що коли екран Splash запускає, що ваша програма IS вже запущена, все, що ви робите, - це затягувати використання вашої програми та підтягувати CPU / GPU, щоб зробити щось, що більшість не вважає за потрібне.

Нам краще дійсно чекати і бачити ваш екран Splash кожен раз, коли ми запускаємо вашу програму, або ми не будемо відчувати, що це написано дуже професійно. Створення ПОВНОГО екрана Splash Screen і дубліката фактичного екрану програми (тому ми вважаємо, що він ініціалізований, коли насправді він не має) МОЖЕ досягти своєї мети (зробити вашу програму виглядати більш професійною), але я не став би багато на це ставити.

Чому б цього не зробити: http://cyrilmottier.com/2012/05/03/splash-screens-are-evil-dont-use-them/

Як це зробити: https://encrypted.google.com/search?q=Android+splash+screen+source

Тож є вагома причина цього не робити, але якщо ви впевнені, що ваша ситуація якимось чином не відповідає цим прикладам, тоді засоби для цього наведені вище. Будьте впевнені, що це дійсно робить вашу заявку більш професійною, або ви перемогли єдину причину, яку ви зробили для цього.

Це як канал YouTube, який починає кожне відео з тривалим графічним вступом (і Outro) або відчуває необхідність розповісти жарт або пояснити, що сталося за минулий тиждень (коли це не канал комедії чи LifeStyles). Просто покажіть шоу! (Просто запустіть програму).


12

Перш за все, відповіді дійсно дуже хороші. Але є проблеми витоку пам'яті. Ця проблема часто відома в Android-спільноті як "Витік активності" . Тепер що саме це означає?

Коли відбувається зміна конфігурації, наприклад зміна орієнтації, Android знищує Діяльність та відтворює її. Зазвичай, збирач сміття просто очистить виділену пам'ять старого екземпляра Activity, і ми всі хороші.

"Витік активності" посилається на ситуацію, коли збирач сміття не може очистити виділену пам'ять старого екземпляра Activity, оскільки це being (strong) referencedвід об'єкта, який жив екземпляром Activity. Кожен додаток для Android має певний об'єм пам'яті, виділений для нього. Коли Garbage Collector не зможе звільнити невикористану пам'ять, продуктивність програми поступово знизиться і в кінцевому підсумку вийде з OutOfMemoryладу.

Як визначити, чи додаток просочує пам'ять чи ні? Найшвидший спосіб - відкрити вкладку «Пам'ять» в Android Studio і звернути увагу на виділену пам’ять під час зміни орієнтації. Якщо виділена пам'ять продовжує збільшуватися і ніколи не зменшується, то у вас є витік пам'яті.

1.Помітка протікає, коли користувач змінює орієнтацію. введіть тут опис зображення

Спочатку потрібно визначити екран заставки у splashscreen.xmlфайлі ресурсу вашого макета

Приклад коду для дії на екрані заставки.

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

Для отримання додаткової інформації перейдіть за цим посиланням


7

Зупинка на екрані заставки для 5-х 5-х зайвих не має особливого сенсу. Добре, якщо ви завантажуєте щось у фоновому режимі, дотримуйтесь цього підходу, щоб реалізувати екран сплеску: Реалізація екрана виплеску правильним способом трохи інша, ніж ви могли собі уявити. Вигляд сплеску, який ви бачите, повинен бути готовий негайно, навіть до того, як ви зможете надути файл макета під час своєї дії.

Таким чином, ви не будете використовувати файл макета. Замість цього вкажіть фон екрана заставки як фон теми діяльності. Для цього спочатку створіть XML, який можна малювати в res / dravable.

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

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

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

</layer-list>

Тут я встановив колір тла та зображення.

Далі ви встановите це як тло дії вашого сплеску в темі. Перейдіть до файлу styles.xml та додайте нову тему для вашої активності:

<resources>

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

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

</resources>

У новій програмі SplashTheme встановіть атрибут фону вікна для XML, який можна малювати. Налаштуйте це як тему вашої активності за допомогою сплеску в AndroidManifest.xml:

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

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

Нарешті, клас SplashActivity повинен просто переслати вас до вашої основної діяльності:

     public class SplashActivity extends AppCompatActivity {

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

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

Детальніше читайте це: 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


4

Тут повний код

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

У графічних ресурсах створіть цей bg_splash.xml

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

У styles.xml створіть власну тему

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

і нарешті в AndroidManifest.xml вкажіть тему своєї діяльності

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

Ура.


Як би я додав файл xml замістьdrawable
viper

Я маю на увазі, що вам доведеться створити bg_splash.xml у каталозі, який можна переглянути, як описано вище.
awsleiman

4

Екрани заставки не повинні завантажуватися з файлу макета, можливо, все-таки буде деяке відставання під час завантаження.

Найкращий спосіб - створити Тему саме для свого SplashScreenActivity та встановити ресурс, який the android:windowBackgroundможна отримати.

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

Коротко:

Заявіть про свій SplashScreenActivity у маніфесті:

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

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

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

}

Далі створіть ресурс для фонового вікна вашої теми:

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

Мальований файл 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 , інше продуктивне використання екрана Splash, яке мені здається, вимагає необхідностіAndroid Permissions на екрані сплеску вашого додатка.

Схоже, більшість додатків обробляють запит на дозвіл таким чином.

  • Діалоги мають поганий UIX, і вони порушують основний потік і змушують вас вирішувати час виконання, і правда, більшість користувачів може навіть не хвилюватись, якщо ваш додаток хоче щось написати на SD-карту. Деякі з них можуть навіть не зрозуміти, що ми намагаємося передати, поки ми не перекладемо це простою англійською мовою.

  • Запит дозволів за один раз зробить меншу кількість "якщо ще" перед кожною операцією, і ваш код виглядає безладним.

Це приклад того, як ви можете попросити дозволу у вашій діяльності з плесканням для пристроїв, на яких працює ОС Android 23+.

Якщо всі дозволи надано АБО вже надано АБО додаток працює на Pre Marshmallow ТОЛЬКО, просто перейдіть і покажіть основний вміст з невеликою затримкою на півсекунди, щоб користувач міг оцінити зусилля, які ми доклали, читаючи це питання, і намагаючись дати все можливе.

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

ви не будете використовувати файл макета. Замість цього вкажіть фон екрана заставки як фон теми діяльності. Для цього спочатку створіть XML, який можна малювати в Res / Dravable.

Примітка: весь код нижче доступний 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>

Тут я встановив колір тла та зображення.

Далі ви встановите це як тло дії вашого сплеску в темі. Перейдіть до файлу styles.xml та додайте нову тему для вашої активності:

<resources>

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

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

</resources>

У новій програмі SplashTheme встановіть атрибут фону вікна для XML, який можна малювати. Налаштуйте це як тему вашої активності за допомогою сплеску в AndroidManifest.xml:

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

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

Нарешті, ваш клас SplashActivity повинен просто переслати вас до вашої основної діяльності:

public class SplashActivity extends AppCompatActivity {

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

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

Зверніть увагу, що ви навіть не налаштували подання для цієї SplashActivity. Погляд виходить з теми. Коли ви налаштуєте інтерфейс користувача для вашої активності в темі, він доступний негайно.

Якщо у вас був файл компонування для вашої активності, то цей файл макета буде видно користувачеві лише після повної ініціалізації вашої програми, що занадто пізно. Ви хочете, щоб сплеск відображався лише за той невеликий проміжок часу до ініціалізації програми.


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

Створіть активність, давайте нам активність під назвою "A", а потім створимо XML-файл під назвою myscreen.xml, який встановить зображення екрана сплеску як фон, а потім скористайтеся таймером зворотного відліку для переходу від одного Activtity до іншого. Щоб знати, як користуватися таймером підрахунку, дивіться мою відповідь на це питання TimerTask в Android?


2

Приклад екранізації екрана:

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

Екран сплеску - це трохи непридатний об’єкт в Android: його не можна завантажувати якнайшвидше для приховування затримки запуску основної діяльності. Для його використання є дві причини: реклама та мережеві операції.

Реалізація як діалогове вікно дозволяє невідкладно переходити з екрану заставки до основного інтерфейсу діяльності.

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

    }
}

Макет:

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

І почніть:

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

    ...
}

Цей підхід є бенефіціаром, і це те, що ви можете запустити MainActivity безпосередньо. Наприклад, коли ви використовуєте push-сповіщення у своєму додатку, коли ви запускаєте до свого додатка, натискаючи на сповіщення, таким чином ви зможете краще керувати цілями сповіщення.
Фарнад Тохідха

2

Інший підхід досягається за допомогою 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();
}

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>

Чи можете ви також додали пояснення?
Роберт

Так, звичайно ... яке пояснення ви хочете, повідомте, будь ласка.
Ашиш Кумар

2

Насправді легкий підхід & gr8

  • Спочатку створіть свій сплеск за допомогою наступного веб-сайту:

    https://www.norio.be/android-feature-graphic-generator/

    Виберіть свій логотип та слоган, оберіть своє гарне тло. змінити розмір до 4096x4096.

  • Тепер завантажте цю картинку та оновіть її:

    https://apetools.webprofusion.com/app/#/tools/imagegorilla

    І генерувати всі необхідні екрани, всі пристрої, всі платформи.

Насолоджуйтесь!

Тут є достатньо відповідей, які допоможуть у реалізації. ця публікація мала на меті допомогти іншим на першому кроці створення екрана!


1

Як щодо супер-гнучкого екрана запуску, який може використовувати той самий код і визначений в AndroidManifest.xml, тому код ніколи не потрібно буде змінювати. Я зазвичай розробляю бібліотеки коду і не люблю налаштування коду, тому що він неохайний.

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

Тоді SpashActivity сам шукає метадані для "start_class", щоб потім зробити сам Намір. Метадані "тривалість" визначає, як довго залишається екран сплеску.

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

Іноді користувач відкрити SplashActivityі вийти відразу , але додаток по- , як і раніше йти MainActivityпісля SPLASH_SCREEN_DISPLAY_LENGTH.

Для запобігання: SplashActivityВи повинні перевірити SplashActivityзавершення чи ні перед тим, як перейти доMainActivity

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

Сподіваюся, що це допоможе


1

Хоча є хороші відповіді, я покажу рекомендований google спосіб:

1) Спершу створіть Themeекран для сплеску: у вас є тема, яка називається splashscreenTheme, вашою темою запуску буде:

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

Примітка:

android:windowBackground вже встановлює ваше зображення splashscreen
потрібно робити це знову в інтерфейсі.

тут також можна використовувати колір замість рисувального.

2) Встановіть тему як маніфест 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) переконайтеся, що запуск_екрана drawableне знаходиться в drawableпапці, якщо зображення не мало.

Це призведе до швидшого запуску екрана запуску і вбереже вас від чорного екрану

Це також дозволяє уникнути зайвого перевитрати


1

Це найкращий пост, який я бачив на екранах заставки: http://saulmm.github.io/avoding-android-cold-starts

Саул Молінеро розбирається у двох різних варіантах екрану заставки: Користуючись перевагою фону вікна для анімації на початковому екрані та відображення користувальницького інтерфейсу заповнювача (який є популярним вибором, який Google використовує для більшості своїх додатків у наші дні).

Я посилаюсь на цю посаду кожен раз, коли мені потрібно враховувати час холодного старту та уникати відключення користувачів через довгі час запуску.

Сподіваюся, це допомагає!


1

У моєму випадку я не хотів створювати нову діяльність лише для того, щоб показати зображення протягом 2 секунд. Під час запуску моїх MainAvtivityзображень завантажуються у тримачі за допомогою пікассо, я знаю, що на це потрібно близько 1 секунди, тому я вирішив зробити наступне у своїй MainActivity 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);

Під час запуску програми перше, що трапляється, ImageViewвідображається, а статусBar видаляється, встановивши прапори вікна на весь екран. Потім я використав a Handlerдля запуску протягом 2 секунд, через 2 секунди я очистив прапори на весь екран і встановив видимість ImageViewдля GONE. Легко, просто, ефективно.


1

Це дійсно просто в Android, ми просто використовуємо оброблювальну концепцію для реалізації екрана заставки

У свій Java-файл SplashScreenActivity вставте цей код.

У XML-файл SplashScreenActivity розмістіть будь-яке зображення за допомогою перегляду зображень.

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

Ви можете додати це у своєму методі onCreate

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

І ініціалізуйте своє значення часу в мілісекундах, як вам хочеться ...

private  static int time=5000;

для більш детальної інформації завантажте повний код за цим посиланням ...

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


1

У Котліні напишіть цей код: -

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

Сподіваюся, це допоможе вам. Дякую ........


0

Простий код, він працює :) Простий сплеск

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

Це поганий приклад - що станеться, якщо ви вийдете з SplashActivity, натиснувши назад? Нитка все одно буде виконуватися.
Марк Кін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.