您的位置:首页 > 移动开发

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

2017-09-14 10:29 489 查看
初始情况下,不管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设置为不透明,不然你看到的就会是系统桌面了。

由于关于这个的内容太多太杂,不好列举代表性的引用链接,见谅
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: