Android APP启动时的黑白屏问题

Android APP启动时黑屏或者白屏的问题很常见,解决起来也不复杂。下面总结一下出现的原因,以及常见的解决此问题的两种方案。

问题出现

先看一下黑屏或者白屏的情形吧,在SplashActivity加载布局文件之前设置主线程睡眠几秒钟,使黑/白屏必然出现

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 设置主线程睡眠3秒钟
    try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    // 加载布局文件
    setContentView(R.layout.activity_splash);
}

问题成因

其实,应用程序启动时出现黑屏或者白屏并不算异常,只是还没有加载到应用首个启动的Activity的布局文件,这时候显示的是Window窗口的背景,黑色或者白色就是window窗口的背景颜色。

Window窗口的背景颜色的设置,可以通过资源文件style.xml中AppTheme的android:windowBackground属性:

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@color/white</item>
</style>

所以,想要解决黑/白屏的问题,自然要从Window窗口的背景下手。

解决问题

方案一:为Window窗口提供背景图

这种解决方案简单粗暴,一张图片搞定整个页面的显示,对于比较复杂的启动页,这种方式倒还不错。如果启动页并不是很复杂,还是推荐采用第二种方案,毕竟,图片比较占内存嘛。至于图片,推荐的就是.png和.9.png两种了。

方案二:使用Layout-list制作背景图

第一步,构建layer-list。如下layout-list-start-pic.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 设置整个屏幕的大背景 -->
    <item>
        <bitmap android:src="@mipmap/login_bg_black" />
    </item>
 
    <!-- 中间logo -->
    <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/start_img_logo" />
    </item>
 
</layer-list>

第二步,在Theme中将layer-list文件设置为window窗口的背景图:

<style name="StartAppTheme" parent="AppBaseTheme">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowBackground">@drawable/layout_list_start_pic</item>
</style>

第三步,将StartAppTheme设置为应用程序首个启动的Activity的theme:

<application
        android:name=".base.BaseApplication"
        android:allowBackup="true"
        android:icon="@mipmap/logo"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
 
        <activity
            android:name=".login.SplashActivity"
            android:launchMode="singleTop"
            android:theme="@style/StartAppTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
</application>

至于为什么新创建了一个StartAppTheme,而不是对AppTheme直接修改,是因为我们想要的仅仅是改变SplashActivity的窗口的背景,同时还是要保证其他Activity的窗口风格不变的。

至此,黑/白屏的问题就解决了,上一张效果图吧:

解决黑白屏问题后的效果图

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值