Android开机画面未显示

时间:2019-03-04 13:17:41

标签: java android splash-screen

我正在尝试在我的应用程序中实现启动画面。 不幸的是,我现在使用的代码没有任何显示,它直接跳到了我的第一个活动中。 这是我的launch_screen.xml文件中的代码,该文件位于我的可绘制文件夹中:

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

请注意,可绘制文件是矢量资产。

这是我的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 :(得分:1)

如果您没有在启动屏幕上使用单独的活动,则可以在清单文件中的活动上设置启动主题:

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

答案 1 :(得分:0)

创建常规活动并在xml文件中进行设计,然后使用处理程序后延迟选项。

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

答案 2 :(得分:0)

我认为您不会从不显示初始屏幕的初始屏幕延迟开始新的活动。

尝试:-

new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            startActivity(yourIntent);
            finish();
        }
    }, 1000);

答案 3 :(得分:0)

您必须在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>

答案 4 :(得分:0)

这是我用于启动屏幕的代码,它工作得很好:

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中声明的标准活动

答案 5 :(得分:0)

由于@Mickverm答案是正确的,所以存在一个问题-每次系统重新创建活动时都会显示启动屏幕。因此,在我的应用程序中,我始终将专用活动用于启动屏幕。但是,活动没有布局,仅设置了启动器主题,因此它会立即加载。

在这里描述:https://www.bignerdranch.com/blog/splash-screens-the-right-way/ 除非确实需要,否则不要对处理程序/睡眠和完整活动使用任何方法(例如,在后台执行某些操作并在启动屏幕上显示进度)