当我们打开 app 的时候,可能会出现一段短暂的白屏或者黑屏界面,这个界面就是 Launch Screen
。
Launch Screen
是为了优化用户体验而存在的,一点击就出现一个界面,让用户有流畅的感觉。
然而,如果只是纯色的白或者黑,就有点丑了。
一般的做法是放logo以及标语。
Launch Screen
实际上是一种 Theme。
**所以我们可以用修改Theme的方式来自定义我们的Launch Screen
。
我们实现的只显示logo的Launch Screen(可能会修改):
新建SplashActivity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package net.sarasarasa.lifeup;
import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity;
public class SplashActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
Intent intent = new Intent(this, WelcomeActivity.class); startActivity(intent); finish(); } }
|
注意,这里并不需要加载ContentView。
这个页面将作为我们的启动页面,作简单的判断然后跳转到其他Activity。
注册成启动Activity,更换Theme
1 2 3 4 5 6 7 8 9 10
| <activity android:name=".SplashActivity" android:label="@string/app_name" android:theme="@style/AppTheme.SplashTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
|
将SplashActivity设为启动Activity。
更改AndroidManifest.xml:
同时将Theme设为AppTheme.SplashTheme
,我们将在下一步创建这个Theme。
新建Theme
在styles.xml
文件中修改或添加:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style>
<style name="AppTheme.TranslucentTheme" parent="AppTheme.NoActionBar"> <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">false</item> <item name="android:statusBarColor">@android:color/transparent</item> <item name="android:background">@android:color/transparent</item> </style>
<style name="AppTheme.SplashTheme" parent="AppTheme.TranslucentTheme"> <item name="android:background">@drawable/splash_layers</item> </style>
|
其实就是隐藏各种状态栏什么的,和我们引导页做的事情是一样的。
所以我们这里直接继承了引导页的Theme然后更改背景。
将背景设为@drawable/splash_layers
,这个文件我们下一步再创建。
创建背景文件
在drawable中创建splash_layers.xml:
1 2 3 4 5 6 7 8 9
| <?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="@mipmap/icon" /> </item> </layer-list>
|
我们这里使用 layer-list
来作为我们的背景。
layer-list中,越后的item,图层越在上层。
当然,你也可以选择普通的图片作为背景图。
第一个item就是背景的白色。
第二个item就是我们的logo。
(这里引入的mipmap最好宽高相等?否则可能会出现奇怪的情况)
设置跳转
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| package net.sarasarasa.lifeup;
import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.support.v7.app.AppCompatActivity;
public class SplashActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
SharedPreferences sharedPreferences = getSharedPreferences("status", MODE_PRIVATE); boolean isFirst = sharedPreferences.getBoolean("isFirst", true); Editor editor = sharedPreferences.edit();
if (isFirst) { Intent intent = new Intent(this, WelcomeActivity.class); startActivity(intent); finish(); editor.putBoolean("isFirst", false); editor.commit(); } else { Intent intent = new Intent(this, MainActivity.class); startActivity(intent); finish(); }
} }
|
我们使用SharedPreferences
来保存用户是否是第一次打开APP,然后进行不同的Activity跳转。
参考文章
https://www.jianshu.com/p/6a863fac3f58
https://antonioleiva.com/branded-launch-screen/
https://blog.csdn.net/u010386612/article/details/79039937
https://www.jianshu.com/p/a859b1250bcb
https://juejin.im/post/58ad90518ac2472a2ad9b684
https://keeganlee.me/post/android/20150909
https://blog.csdn.net/qq_26650589/article/details/53738176