目录

一、白屏原因分析

二、解决白屏方案

方案一、提供 .png 背景图

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

1.  制作替代白屏的背景:bg_splash.xml

2. 将 bg_splash.xml 设为 Window 背景

3. 将 bg_splash.xml 设为启动页 Activity 的背景

4. 启动页效果图

三. 启动页全屏显示


每次 Android APP 启动的时候,会出现一个白屏(或黑屏)出现在我们的的应用启动页之前,虽然一闪而过时间很短,但是比较影响观感和体验,显得我们的 APP 在细节处理方面还不够好,可以观察一些比较主流的Android APP,比如 QQ、CSDN 等,都不会有启动白屏的问题。

一、白屏原因分析

其实,白屏现象很容易理解,在冷启动一个 APP 的时候,启动页还没完成布局文件的加载,此时显示的是 Window 窗口背景,我们看到的白屏就是 Window 窗口背景。

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 在加载布局之前,显示的是 window 的背景setContentView(R.layout.activity_launcher);}

Window 背景的是由 Application theme 决定的,通过设置 AndroidManifest.xml 文件里面 <application> 属性实现:

android:theme="@style/AppTheme"

如下所示:背景色是白色背景,启动时就会显示白屏。

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme"><item name="android:windowNoTitle">true</item><item name="android:windowBackground">@color/white</item><!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

其实看到这里,我们就知道怎么来解决白屏问题了,我们可以将 Window 的背景和 APP 启动页的背景设置成一样的,从视觉体验上让用户感觉一点开 APP 显示就是启动页面

二、解决白屏方案

方案一、提供 .png 背景图

  • 如果内容布局比较复杂,可以采用背景图片的方式,但是由于存在不同尺寸和像素密度的屏幕,可能需要提供多张不同的背景图来适配各种屏幕,以避免图片拉伸变形。
  • 如果图片不复杂,可以采用 .9.png 图片,提供一张图片就可以适配任何手机。

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

1.  制作替代白屏的背景:bg_splash.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" ><item><shape><solid android:color="#FFFFFF"/></shape></item><!-- 顶部边距200dp --><itemandroid:top="200dp"><bitmapandroid:gravity="top|center_horizontal"android:src="@mipmap/learn" /></item>
</layer-list>

2. 将 bg_splash.xml 设为 Window 背景

    <style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar"><!-- has incuded in parent style --><!--<item name="android:windowNoTitle">true</item>--><!-- 窗口状态栏颜色可以设置为和背景色一致 --><item name="colorPrimaryDark">@color/white</item><!-- 窗口的背景,替代启动时候出现的白屏 --><item name="android:windowBackground">@drawable/bg_splash</item></style>

3. 将 bg_splash.xml 设为启动页 Activity 的背景

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@drawable/bg_splash" >// 其他布局省略,你可以在背景布局上面添加其他内容</LinearLayout>

4. 启动页效果图

三. 启动页全屏显示

可以看到,在背景图中有一个离顶部有一定间距的图片:「learn and live」,在显示 Window 背景时候,默认是全屏幕,所以显示启动页Actiivty的时候,也需要将其设置为全屏模式,否则的话,Window 窗口和启动页虽然使用的是相同背景「bg_splash.xml」,但由于屏幕大小发生了变化,你会看到图片「learn and live」会有一个从上往下的移动,画面看起来像是一个抖动。

类似的现象你可以观察下 Android 版的「微博APP」,启动页有个「随时随地 发现新鲜事」的 Slogan 图片,在启动时候会有抖动的现象,就是没有处理启动页全屏造成的,给人体验就不是太好。

设置全屏会遇到很多异形屏(如:刘海屏、水滴屏、挖孔屏 ),采用传统的全屏设置模式会没有效果,笔者测试有效的代码如下:

<无效方式>

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

<正确方式>

@SuppressLint("WrongConstant")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//Android各种屏,刘海屏,打孔屏满屏显示: https://blog.csdn.net/cention168/article/details/124037221if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {WindowManager.LayoutParams lp = getWindow().getAttributes();//用在android高版本满屏,穿过摄像头。lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;getWindow().setAttributes(lp);}else{getWindow().requestFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);}final View decorView = getWindow().getDecorView();//View.SYSTEM_UI_FLAG_HIDE_NAVIGATION用来隐藏底部悬浮条decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);setContentView(R.layout.activity_launch);}

解决 Android APP 启动页白屏问题及如何实现全屏显示相关推荐

  1. android打开app白色页面,完美解决Android App启动页有白屏闪过的问题

    应用启动的时候有短暂的白屏,如图: 可以通过设置theme的方式来解决 @color/colorPrimary @color/colorPrimaryDark @color/colorAccent t ...

  2. android启动页背景设置,Android APP启动页白(黑)屏问题及解决方法

    一.引言 使用Android智能手机用户都有碰到过,当一个APP启动时,有的APP启动界面会首先展示一个白屏或者黑屏,然后再进入欢迎页,稍作停留最后进入APP主页. 这个白屏或者黑屏的问题真的很影响体 ...

  3. 关于android app启动页白屏黑屏和华为手机启动页图片跳跃闪屏的问题

    1.产生原因    关于点击app图标出现白屏和黑屏的产生原因,首先要说的就是app的启动模式:冷启动(cold start),暖启动(warm start),热启动(lukewarm start). ...

  4. android启动画面白屏,解决Android APP启动出现白屏的问题

    一.前言 Android开发者都会有这样的体会吧!自己开发的APP,在启动APP的时候,会出现一段时间白屏,然后才会显示APP的界面.其实这段时间的出现,是APP在启动时,需要初始化一些数据,然后才会 ...

  5. Android app启动页广告

    一款app刚出世的时候是没有广告的,流畅的速度和粘性的设计,让这款app使用的人越来越多,这个时候,广告就诞生了,app中加入广告的位置有很多,最常见的就是启动页的广告,首页的banner的轮询广告, ...

  6. Android app 启动页尺寸大小 忘记了怎么办

    启动页尺寸忘记了我们可以创建查看大小,下面来看下 1点击File ---->点击new ----->image Asset 在点击next 然后在点击图片就显示尺寸了 我们可以看到 mip ...

  7. Android启动页白屏背景图拉伸的解决方案

    Android启动页白屏&背景图拉伸的解决方案 1.前言 2.问题点 3.代码及说明 4.注意点 1.前言 新项目的闪屏页面用到一张大图,UI那边要求那张图片填充全屏,而且不能压缩或拉伸. 然 ...

  8. Android开发——解析App启动页(Splash)黑/白闪屏现象

    前言 我在开发App的时候,出现App在启动会出现短暂的黑/白闪屏现象.这样现象对用户的体验感是会产生不好的影响,于是我就研究这个现象的起因和解决办法.不负有心人,我在翻了很多博客,踩完坑之后找到起因 ...

  9. android启动画面白屏,Android app启动时黑屏或者白屏的原因及解决办法

    1.产生原因 其实显示黑屏或者白屏实属正常,这是因为还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景. 示例: 2.解决办法 通过设置设置Style (1)设置背 ...

最新文章

  1. linux线程有什么用,在linux下查看一个进程它有多少个线程是用什么命令?
  2. TCL发布7项AI合作项目,聘任蒋涛为技术顾问
  3. 神经科学中的数学之美
  4. DOS call 中的%cd%,当前文件夹演示
  5. 电子工程师必须知道的10个网站 !!!
  6. Redis info参数总结
  7. HDU2031 进制转换【进制】
  8. 被清华免试录取的围棋天才,横扫60位围棋大师的最强AI,竟然都输给了高中生!?...
  9. 70个python毕设项目_56个具有开创性的Python开源项目-开始使用Python
  10. Centos 系统添加/删除用户和用户组
  11. sqlite排序规则
  12. 教你在 Centos 7 中使用 DenyHosts防止ssh暴力破解(亲测)
  13. 水很深的深度学习-Task02机器学习基础
  14. 2017年最受欢迎的15大Python库有哪些?
  15. 台式计算机规格型号怎么查,台式电脑主板型号在哪里看
  16. python正态分布拟合曲线怎么打印出中位数值,如何用对数正态分布函数拟合数据...
  17. ws2812怎么调亮度_深度解析OLED屏幕的低亮度DC调光是如何实现的?
  18. 高德地图-初始化地图
  19. 图片分类-K近邻分类器
  20. 如何购买SAP软件?

热门文章

  1. 臻识科技用全智能相机,把智慧城市的交通/安防/工业制造做到极致
  2. 结构化思维--让思考更清晰,让表达更准确。
  3. 计算机可以考A类事业单位么,事业单位A类介绍:考什么?什么专业​能报考?​...
  4. 一个比较完整的机房建设方案要求
  5. maven编译报错Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile
  6. 基于B样条曲线的路径规划(含matlab代码免费下载)
  7. Matlab曲线图导出eps数据量太大占用很多存储空间
  8. C语言系统讲解,C语言学生信息管理系统讲解.doc
  9. 通俗易懂地解释贝叶斯网络及其应用
  10. 拉力试验机可以分为几种类型