原理
我们之前设置了Window
透明,实现了去掉白屏和黑屏,现在要弄一个颜色或者图片来代替白屏和黑屏,所以首先要把原来style
中的透明属性去掉。然后给Window
设置一个背景颜色或者图片。
实现步骤
1、首先在res/drawable下新建一个layer-list
,名字随便取,比如splash.xml
:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 背景颜色 -->
<item android:drawable="@color/white" />
<item>
<!-- 图片 -->
<bitmap
android:gravity="center"
android:src="@drawable/wel_page" />
</item>
</layer-list>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
layer-list
大家都会写吧,上面是背景颜色,下面是一张图,这张图可以是全屏的图,可以是一张小图。如果是全屏的图,那上面的颜色也可以不用设置,如果是小图,就要指定下颜色了,并且可以指定图片在位置。
2、给主题设置Window
背景:
<style name="SplashTheme" parent="AppBaseTheme">
<!-- 欢迎页背景引用刚才写好的 -->
<item name="android:windowBackground">@drawable/splash</item>
<item name="android:windowFullscreen">true</item>
<!-- <item name="android:windowIsTranslucent">true</item> --> <!-- 透明背景不要了 -->
</style>
- 1
- 2
- 3
- 4
- 5
- 6
上面的<item name="android:windowBackground">
可以用我们上面的layer-list
作为背景,当然也可以设置个全屏的图片。
3、在AndroidManifest.xml中定义SplashActivity
的theme
为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>
</activity>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
4、SplashActivity的实现,在onCreate()
启动你的MainActivity
即可,其他什么都别干:
public class SplashActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startActivity(new Intent(this, MainActivity.class));
finish();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
特别注意:为保证启动速度,SplashActivity
不要调用setContentView()
方法。因为Activity
设置了layout
,它在App
完全初始化完成后才会显示,也会耗时。使用该启动画面实现也能兼容到上面说的白屏和黑屏的问题。