文章目录
1. 前言
记得之前记录过这个问题怎么解决,但是在自己的这个博客中确实没有找到。所以还是继续记录一笔。为了更加直观的说明这个问题,这里我随意创建了一个应用,然后做一个录屏:
在上面的动态图片中,可以看到打开系统自带、自己创建应用均有启动的黑屏显现。但是自己在平时实际中使用App
的过程中,却没有看见过这个显现,取而代之的是一个启动页面。这种效果更加友好,所以这里也来记录下怎么解决这个问题。
2. 解决
解决方式其实就是自定义主题样式。大致存在两种方式来解决这个问题,第一个是直接设置背景色,第二个是设置背景图片。
2.1 纯色背景
对于设置颜色,我们需要同时设置几个部分的颜色,分别包括最顶部往下的状态栏、ActionBar
、主页的三个颜色。具体的对应关系如下:
注:上图来自Android如何设置顶部状态栏颜色(主题)
所以解决方案为隐藏ActionBar
,并设置状态栏statusBarColor
的颜色和windowBackground
的颜色一致即可。那么可以为启动的Activity
来设置主题,即:android:theme="@style/WelcomeTheme"
。对于WelcomeTheme
的主题,定义在themes.xml
文件中:
<style name="WelcomeTheme" parent="Theme.AppCompat.NoActionBar">
<!--设置背景颜色-->
<item name="android:windowBackground">@color/full_screen</item>
<!--设置没有ActionBar-->
<item name="android:windowNoTitle">true</item>
<!--设置顶部状态栏颜色-->
<item name="android:statusBarColor" tools:targetApi="l">@color/full_screen</item>
</style>
对于full_screen
定义为:
<color name="full_screen">#FF369046</color>
那么这样就可以实现一个直观上的全屏效果。如下:
那么对于启动页可以设置一个应用Logo
,就只需要设置一个超时跳转即可。就不会给用户一种视觉上的白/黑屏效果。
但是,其实这并不是我们所希望的效果,因为我们希望在进入后的背景色、状态栏颜色都回归到正常的App
的默认主题颜色,所以我们还需要在启动MainActivity
的时候进行主题的重置。即:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.Theme_PlayMusicDemo); //恢复原有的样式
setContentView(R.layout.activity_main);
}
}
最终效果:
2.2 设置背景图片
当然设置纯色背景可以实现效果,但是在实际的App
中,都是设置一个本应用的Logo
,也就是设置的是一张图片背景。直接设置图片即可:
<item name="android:windowBackground">@drawable/aaa</item>
但是,其实感觉QQ
的启动应该是在背景设置为白色,进入后的Activity
这个页面设置为Logo
页面。因为我在测试中发现如果就考虑修改白屏/黑屏的部分,跳转的太快了,而实际上的App
的停留时间在2-3
秒钟。所以如果需要还需要自己去尝试看看该如何实现。
3. 最终方案
- 将白屏/黑屏效果部分替换为纯色背景;
- 将启动的
Activity
设置为欢迎的Logo
,并启动一个超时Handler
来启动主页。
对于第一个这里不再给出,对于超时的Handler
来启动另一个Activity
这里可以给出示例代码:
// 3秒钟后跳转
new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message message) {
startActivity(new Intent(getApplicationContext(), XXXActivity.class));
finish();
return false;
}
}).sendEmptyMessageDelayed(0, 3000);
Thanks