Android Splashscreen не отображается - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь внедрить заставку в свое приложение.К сожалению, с кодом, который я сейчас использую, ничего не появляется, оно просто переходит прямо к моей первой деятельности.Вот код из моего файла launch_screen.xml, который находится в моей папке drawable:

    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">

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

        <item
            android:drawable="@drawable/ic_splashscreen2"
            android:gravity="center"
        />

    </layer-list>

Обратите внимание, что файл drawable является векторным активом.

А вот код из моегофайл styles.xml, где я создаю новую тему, используя этот файл launch_screen.xml:

       <style name="AppTheme.Launcher">
    <item name="android:windowBackground">@drawable/launch_screen</item>

Код из моего манифеста:

<activity android:name=".ViewEventsActivity"
            android:theme="@style/AppTheme.Launcher">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"
                />

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

Может кто-нибудь сказать мне, что я делаюне так и как это исправить?

Ответы [ 6 ]

0 голосов
/ 04 марта 2019

Поскольку ответ @Mickverm верный, с ним связана одна проблема - заставка будет отображаться каждый раз, когда активность воссоздается системой.Поэтому в своих приложениях я всегда использую выделенную активность для заставки.Однако активность не имеет макета и содержит только набор тем запуска, поэтому она загружается немедленно.

Это описано здесь: https://www.bignerdranch.com/blog/splash-screens-the-right-way/ Не используйте подход с обработчиком / сном и полной активностью, если вам действительно не нужно(например, сделать что-то в фоновом режиме и показать прогресс на заставке)

0 голосов
/ 04 марта 2019

Если вы не используете отдельную активность для заставки, вы можете установить тему «Всплеск» в активности в файле манифеста:

<activity 
    android:name=".MainActivity"
    android:theme="@style/AppTheme.Launcher">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>

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

Styles.xml

<style name="AppTheme.Launcher">
    <item name="android:windowBackground">@drawable/launch_screen</item>
</style>

В Упражнении перед суперзвуком onCreate сбросьте тему на AppTheme

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.AppTheme);
    super.onCreate(savedInstanceState);
}
0 голосов
/ 04 марта 2019

Вот мой код для заставки, и он работает очень хорошо:

public class SplashScreenActivity extends AppCompatActivity {

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

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent intent = new Intent(SplashScreenActivity.this, OnBoardingActivity.class);
            startActivity(intent);
            finish();
        }
    }, 2000);
  }
}

Где SplashScreenActivity - стандартная активность, объявленная в AndroidManifest.xml

0 голосов
/ 04 марта 2019

Вы должны внедрить intent-filter на свой SplashScreen в Manifest.Например:

    <activity
        android:name=".SplashScreen"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="adjustPan">
        <intent-filter>
            <category android:name="android.intent.category.LAUNCHER" /> //This line
        </intent-filter>
    </activity>
0 голосов
/ 04 марта 2019

Я полагаю, вы не задерживаете начало новой активности с заставки, на которой не отображается заставка.

Попробуйте: -

new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            startActivity(yourIntent);
            finish();
        }
    }, 1000);
0 голосов
/ 04 марта 2019

создать обычную активность и дизайн в xml-файле, а затем использовать опцию отложенной отправки обработчика.

handler.postDelayed(new Runnable(){
        @Override
        public void run() {
            //startactivity
            finish();
        }
    }, 7000 );
...