当前位置:   article > 正文

android AppCompat, splash启动白屏(黑屏)全屏,去掉状态栏,以及splash与虚拟按键遮挡_android splash启动 状态栏黑色未撑满

android splash启动 状态栏黑色未撑满

在做项目是,需要加一个splash,以美化应用,消除app启动等待的乏味

一、使用环境

        使用Android Studio activity 继承 AppCompatActivity, 实现splash功能

        测试环境,没有虚拟返回按键的安卓手机和带有虚拟按键的手机,测试虚拟按键对splash的影响

二、目标与一般实现

        一般实现splash是新建一个activity,然后在这个acrivity的xml文件里设置splash背景,这样做的效果和没有加splash的效果一样,即有黑屏或白屏(看使用的主题而定)

三、实现启动无白屏(黑屏)

        实现无白屏的原理是,在activity的主题里设置背景,即用自己的splash图片代替app启动时的白屏(默认的启动背景是白屏或黑屏)代码如下:

注:以上这个theme就是完整的配置,直接设置NoTitleFullscreen 为启动Activity的theme,就会得到完美的splash,代码及使用方法如下:

  1. <activity
  2. android:name=".SplashActivity"
  3. android:configChanges="orientation|keyboardHidden|screenSize"
  4. android:label="@string/app_name"
  5. android:theme="@style/NoTitleFullscreen"
  6. >
  7. <intent-filter>
  8. <action android:name="android.intent.action.MAIN" />
  9. <category android:name="android.intent.category.LAUNCHER" />
  10. </intent-filter>
  11. </activity>
在values/styles.xml里面增加主题

  1. <!--设置-全屏-->
  2. <style name="NoTitleFullscreen" parent="AppTheme.NoActionBar">
  3. <item name="android:windowNoTitle">true</item>
  4. <item name="windowActionBar">false</item>
  5. <item name="android:windowFullscreen">true</item>
  6. <item name="android:windowContentOverlay">@null</item>
  7. <item name="android:windowBackground">@drawable/bg_splash</item>
  8. <item name="android:windowIsTranslucent">true</item>
  9. </style>
其中
<item name="android:windowBackground">@drawable/bg_splash</item>
就是指定一幅启动画面,代替原来的白屏,从而去除白屏

//其他参数的作用在下面解释

四、实现在splash隐藏状态栏,以及actionbar

在上面的主题里面已经包含了设置全屏的参数,再次 列出:

  1. <item name="android:windowNoTitle">true</item>
  2. <item name="windowActionBar">false</item>
  3. <item name="android:windowFullscreen">true</item>
五、除了设置启动背景图,还专门增加一个splashActivity 以实现稳定的启动效果

从其他博客可以看到,有的作者建议直接使用如下参数,去掉白屏,并且把此作为启动splash

<item name="android:windowBackground">@drawable/bg_splash</item>

但是实际测试,这样的启动会非常的快,一闪而过(这种做,相当与把以前的白屏替代为自己的图片,白屏是一闪而过)

因此这几建议专门增设一个activity作为splashActivity,并在splashActivity控制splash时间。

这样设计之后的效果是:一共有需要设置两次背景图片:

第一次:splashActivity通过theme设置的启动背景 

以下的设置方法:

 android:theme="@style/NoTitleFullscreen"
  1. <style name="NoTitleFullscreen" parent="AppTheme.NoActionBar">
  2. <item name="android:windowBackground">@drawable/bg_splash</item>
  3. </style>

第二次:splashActivity页面背景

以下的设置方法:

在SplashActivity的资源文件activity_splash.xml里设置:

android:background="@drawable/bg_splash"

六、在没有实体按键的手机上,虚拟按键会遮挡启动的splash造成显示不完全

在没有虚拟按键的手机上,这两个背景显示能完美对应,显示正常。
但是在有虚拟按键的手机上,虚拟按键会影响第一次设置的图片的正常显示(图片被虚拟按键遮挡)
针对这个问题在,NoTitleFullscreen里面增加了如下选项;

<item name="android:windowIsTranslucent">true</item>
从而达到在有虚拟按键的的时候,正常显示

七、新增SplashActivity的延时java代码实现

  1. public class SplashActivity extends AppCompatActivity {
  2. private final Handler mHideHandler = new Handler();
  3. private final Runnable gotoPage = new Runnable() {
  4. @Override
  5. public void run() {
  6. Intent mIntent = new Intent(SplashActivity.this, MainActivity.class);
  7. startActivity(mIntent);
  8. finish();
  9. }
  10. };
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_splash);
  15. mHideHandler.postDelayed(gotoPage, 3000);
  16. }
  17. }



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/126262
推荐阅读
相关标签
  

闽ICP备14008679号