关闭

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

标签: Androidsplash白屏虚拟按键遮挡
1655人阅读 评论(1) 收藏 举报
分类:

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

一、使用环境

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

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

二、目标与一般实现

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

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

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

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

<activity
            android:name=".SplashActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/app_name"
            android:theme="@style/NoTitleFullscreen"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
在values/styles.xml里面增加主题

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

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

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

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

 <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <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"
<style name="NoTitleFullscreen" parent="AppTheme.NoActionBar">
        <item name="android:windowBackground">@drawable/bg_splash</item>
    </style>

第二次:splashActivity页面背景

以下的设置方法:

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

android:background="@drawable/bg_splash"

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

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

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

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

public class SplashActivity extends AppCompatActivity {
    private final Handler mHideHandler = new Handler();
    private final Runnable gotoPage = new Runnable() {
        @Override
        public void run() {
            Intent mIntent = new Intent(SplashActivity.this, MainActivity.class);
            startActivity(mIntent);
            finish();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_splash);
        mHideHandler.postDelayed(gotoPage, 3000);
    }
}



0
0
查看评论

Android启动页,引导页适配华为手机(虚拟按键)显示问题

Android启动页,引导页适配华为手机(虚拟按键)显示问题
  • gaoyongshuo
  • gaoyongshuo
  • 2017-07-20 11:32
  • 1408

关于Android主题splash全屏和主页面的沉浸式状态栏

最近做项目需要经常修改Android主题,对于每个Activity都进行自定义主题设置,下面讲一下对于主题的一些使用心得。 1. 全屏显示activity 由于studio中继承AppCompatActivity,所以在setContentView方法前才用getWindow().setFla...
  • Tracy_ZXD
  • Tracy_ZXD
  • 2017-02-27 14:40
  • 1454

SplashActivity最简单的引导页

public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(...
  • JiuFeng0_0
  • JiuFeng0_0
  • 2016-11-09 22:14
  • 2192

Android App 隐藏标题栏+状态栏+导航栏

一、隐藏当前Activity标题栏     在当前Activity中调用:this.requestWindowFeature(Window.FEATURE_NO_TITLE); 二、隐藏当前Activity状态栏     在当前Activity中...
  • MyArrow
  • MyArrow
  • 2014-05-12 11:45
  • 70088

虚拟按键遮挡app页面,如华为荣耀7i

最近开发遇到一个问题,app首页底部的一部分,被手机的虚拟按键遮挡住了,导致内容显示不全,之后各种搜索,记录如下. ①: 我用到了slidingmenu控件加载,而slidingmenu在版本比较高的手机上,显示有隐藏问题,没有计算虚拟按键所占用的空间,解决: 找到slidingmenu.java这...
  • qq_31733073
  • qq_31733073
  • 2016-03-25 17:07
  • 5433

手淘启动页全面屏和虚拟键适配

Android的多屏幕适配一直是困扰开发人员的难题,本文以淘宝启动页适配全面屏为例子,仔细剖析了多屏幕适配的基本原理,帮助理清屏幕适配中需要注意的一些点。
  • lulicheng
  • lulicheng
  • 2017-11-29 14:56
  • 586

Android 设置应用的底部导航栏(虚拟按键)背景颜色

Android手机机型种类繁多,但是虚拟按键也就是底部的导航栏,不外乎两种设计方式,一种是作为虚拟按键设计到屏幕内部,一种是作为系统按键设计到屏幕外面。 对于按键在屏幕内部的机型,因为虚拟按键也是屏幕内容的一部分,它也实际占据屏幕一定的高度,在系统应用中虚拟按键默认呈现的都是透明的背景色,但...
  • github_2011
  • github_2011
  • 2017-07-10 11:03
  • 5511

SystemUI底部三个虚拟按键的背景颜色修改

三个虚拟按键的设置是在framework层中。     先查看三个按键的布局的初始化: 位置 frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBa...
  • Garment1991
  • Garment1991
  • 2015-12-30 21:45
  • 5977

Android应用启动前 白屏或者黑屏原因?

在使用某些APP时会发现 点击应用稍有延迟显示黑屏 或者白屏 然后加载数据进入到应用界面? 那么为什么会出现短暂的黑屏或者白屏呢?什么时候出现黑屏 什么时候出现白屏呢? 延迟原因:因为再启动应用时 可能由于网络不稳定或者加载数据过多导致应用启动后 界面还没有显示 此时我们   ...
  • u014041033
  • u014041033
  • 2016-03-01 17:02
  • 2656

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

在做项目是,需要加一个splash,以美化应用,消除app启动等待的乏味 一、使用环境         使用Android Studio activity 继承 AppCompatActivity, 实现splash功能 ...
  • fengyeNom1
  • fengyeNom1
  • 2017-09-27 16:00
  • 173
    个人资料
    • 访问:73659次
    • 积分:1180
    • 等级:
    • 排名:千里之外
    • 原创:41篇
    • 转载:1篇
    • 译文:3篇
    • 评论:13条
    文章分类
    最新评论