CrossApp 设置App启动页(无任何黑屏白屏,显示完启动画面之间到显示出首页界面)

初始情况下,不管iOS或是Android在点击App图标到显示出图像.这之间都是会出现黑色屏幕的过渡情况。


iOS: 在iOS上相对来说要比Android上简单的多。设置下图片、文件即可


Android: 在android上就要麻烦的多了。我在设置的过程中就碰上了各种问题(黑屏、白屏、显示系统桌面等)。下面先给代码然后再解释一番

首先需要两个主题(一般写在string.xml或styles.xml)、一个启动页activity(LoadingActivity.java)、一个启动页的布局文件xml(loading.xml)、一个启动页的背景图(loading.png)


(主题)

<style name="LaunchLayerStyle" parent="android:Theme.Light">    

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

        <item name="android:windowNoTitle">true</item>    

        <item name="android:windowFullscreen">true</item>    

        <item name="android:windowIsTranslucent">false</item>

        <item name="android:windowContentOverlay">@null</item>    

</style>

<style name="NotTranslucentStyle" parent="@android:style/Theme">

        <item name="android:windowNoTitle">true</item>

        <item name="android:windowIsTranslucent">true</item>

        <item name="android:windowContentOverlay">@null</item>

</style>



(启动页activity)

import android.app.Activity;

import android.os.Bundle;

import android.content.Intent;

import android.graphics.PixelFormat;

import android.os.Handler;

import android.view.WindowManager;


public class LoadingActivity extends Activity {

    

    //time for picture display

    private static final int LOAD_DISPLAY_TIME = 0;

    

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        

        getWindow().setFormat(PixelFormat.RGBA_8888);

//        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);

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

        setContentView(R.layout.loading);

        

        new Handler().postDelayed(new Runnable() {

            public void run() {

                //Go to main activity, and finish load activity

                Intent mainIntent = new Intent(LoadingActivity.this, YueLiang.class);

                LoadingActivity.this.startActivity(mainIntent);

//                LoadingActivity.this.finish();

            }

        }, LOAD_DISPLAY_TIME);

    }

}


(布局xml)

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

     android:orientation="vertical"  

     android:gravity="center|center"  

     android:layout_width="fill_parent"  

     android:layout_height="fill_parent"  

     android:background="@drawable/loading">  

 </LinearLayout> 


(文件对应位置如图)


然后修改AndroidManifest.xml(修改Main的 Activity 注册LoadingActivity)


<activity android:name=".LoadingActivity"

                  android:label="@string/app_name"

                  android:screenOrientation="portrait"

                  android:theme="@style/LaunchLayerStyle"

                  android:configChanges="orientation|keyboardHidden"

                  android:windowSoftInputMode="adjustResize">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        

        <activity android:name=".YueLiang"

              android:screenOrientation="portrait"

              android:theme="@style/NotTranslucentStyle"

              android:windowSoftInputMode="adjustResize"

              android:configChanges="orientation|keyboardHidden">

            

        </activity>


如此这般基本上大功告成了.接下来说说我的理解和分析


首先黑屏、白屏并不是程序问题,而是程序界面的背景颜色。

其次黑白屏的出现也是有时间段的:

1:点击app图标到系统创建线程进入程序这段时间(闪屏)

2:进入程序到加载完主activity数据这段时间

3:activity跳转到另一个activity加载数据这段时间


所以说要想不黑屏,就需要为这些时间段的背景赋予一些自定义的东西(如图片等)


第一个时间段: 为LoadingActivity(也就是主Activity)设置主题背景。也就是上述的第一个style(<style name="LaunchLayerStyle")。第一个style的作用是

<item name="android:windowBackground">@drawable/loading</item>   设置背景 

        <item name="android:windowNoTitle">true</item>           有无标题(具体什么是标题你可以设置false试试)

        <item name="android:windowFullscreen">true</item>        全屏

        <item name="android:windowIsTranslucent">false</item>    透明

        <item name="android:windowContentOverlay">@null</item>   闪屏界面  第一个阶段这句起到不显示黑白屏的作用


第二个时间段: 这段时间需要人为控制,尽量将加载数据的时间控制到肉眼不可见的程度,所以会将主activity设计的很简单,不加载一些耗时的东西。


第三个时间段:这段时间原理与第二个时间段相同,但是现实中app的首页基本上都是要加载一些数据的(网络请求等),所以就用到了第二个style,设置给LoadingActivity之后将要显示的activity。第二个style的作用是将背景设置为透明,这样你看到的就是上一个activity的界面了.需要注意的是一定要讲主activity设置为不透明,不然你看到的就会是系统桌面了。



由于关于这个的内容太多太杂,不好列举代表性的引用链接,见谅


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值