Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 545|回复: 0

Android 冷启动状态下Splash界面拉伸问题解决

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-4-13 14:04:54 | 显示全部楼层 |阅读模式

    问题现象

    为了防止在app启动时出现黑屏或者白屏问题。需要选择冷启动处理。实现方式如下:

    在styles文件中添加自定义主题:

    <style name="ThemeSplash" parent="Theme.AppCompat.Light.NoActionBar">
         <item name="android:background">@drawable/bg_welcome_default</item>
         <item name="android:windowNoTitle">true</item>
         <item name="android:windowFullscreen">true</item>
         <item name="windowActionBar">false</item>
         <item name="windowNoTitle">true</item>
    </style>

    在Manifest文件中使用主题:

     <application
            android:allowBackup="true"
            android:label="@string/app_name"
            android:supportsRtl="true">
            <activity
                android:theme="@style/ThemeSplash"
                android:name=".SplashActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    </application>

     

    在app中的bg_welcome_default图片的大小有三个640 * 960,750 * 1334,1242 * 2208。

    在相匹配宽高比的手机可以正常显示,会在类似小米9(1080 * 2340)会出现拉伸情况。(注意:在这里不能使用宽高比为1080 * 2340 的替换 1242 * 2208 的图片。因为相同像素密度下宽高比为1242 * 2208 的手机也会存在拉伸,这样替换不能解决根本问题。)

    问题原因

    在使用图片作为全屏图片时屏幕的宽高比和图片的宽高比不匹配。

    解决方法

    图标使用单独切图,背景自定义绘制,代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item>
            <shape >
                <solid android:color="@color/white"/>
            </shape>
        </item>
        <item android:left="10dip" android:top="10dip">
            <bitmap android:src="@drawable/bg_welcome"
                android:gravity="center"/>
        </item>
    </layer-list>

    引申问题

    经过上面方法的处理,Splash界面拉伸问题已经解决,但是还有一个小问题,就是小米9的statusBar没有被图片填充。经过道长排查,自定义主题代码可以使用如下代码:

        <style name="ThemeSplash" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="android:windowBackground">@drawable/bg_welcome_default</item>
            <item name="android:statusBarColor">@android:color/transparent</item>
    
            <!--<item name="android:windowNoTitle">true</item>-->
            <!--<item name="android:windowFullscreen">true</item>-->
            <!--<item name="windowActionBar">false</item>-->
            <!--<item name="windowNoTitle">true</item>-->
    
        </style>

    注意:这个主题是放在v21\styles.xml中,和上面的代码不冲突。

    到这里,冷启动状态下Splash界面拉伸问题基本就解决了。

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-19 23:54 , Processed in 0.062656 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表