这是复制一位大神的,并亲测过:用作后续复习
链接:http://www.cnblogs.com/liqw/p/4263418.html
你会很奇怪,为什么有些app启动时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示,但是有些app却不会如QQ手机端,的确这里要做处理一下。这里先了解一下为什么会出现这样的现象,其实很简单,简历一个简单的例子就可以理解了。
其实,黑屏或者白屏这里并不是不正常,而是还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景。代码如下,可以自己写个小demo就理解了。
1
2
3
4
5
6
7
8
9
10
11
12
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
//
注意:添加3秒睡眠,以确保黑屏一会儿的效果明显,在项目应用要去掉这3秒睡眠
try {
Thread.sleep(3000);
} catch (InterruptedException
e) {
e.printStackTrace();
}
//
在这里之前,黑屏或者白屏都是window的背景颜色,是窗口背景,还没到界面的布局呢,要执行setContentView后才显示布局
setContentView(R.layout.activity_launcher);
}
那window窗口背景在那里提供呢?在提供theme里面,如下提供的是白色背景,那就是启动时白屏一会儿的颜色设置。
1
2
3
4
5
6
所以,在theme设置windowBackground就可以解决启动时白屏黑屏一会儿了,下面提供三种解决方案:
一、提供.png背景图
提供背景图是解决的一个方法,但是要适配各种屏幕,提供很多张图片。除非图片非常复杂只能用背景图了就用这种方法吧,否则个人不建议。
二、提供.9.png(NinePatch)背景图片
如果图片不是很复杂,可以做成NinePatch图片,那就直接制作NinePatch图片,提供一张就可以适配任何手机,何乐而不为呢。
三、使用Layout-list制作背景图片
如果可以使用这种方式,推荐使用这种Layout-list制作背景图片。前2种都是使用图片占用内存啊,使用Layout-list比较省内存,做出app也不会说因为图片多体积变大吧。
下面给出代码。
LaunchActivity为启动界面停留3秒后跳转到主页面MainActivity,为了达到显示黑屏白屏的效果更明显,在setContentView之前线程睡眠3秒。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class LauncherActivity extends Activity
{
public final int MSG_FINISH_LAUNCHERACTIVITY
= 500;
public Handler
mHandler = new Handler(){
public void handleMessage(Message
msg) {
switch (msg.what)
{
case MSG_FINISH_LAUNCHERACTIVITY:
//跳转到MainActivity,并结束当前的LauncherActivity
Intent
intent = new Intent(LauncherActivity.this,
MainActivity.class);
startActivity(intent);
finish();
break;
default:
break;
}
};
};
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
//
不显示系统的标题栏,保证windowBackground和界面activity_main的大小一样,显示在屏幕不会有错位(去掉这一行试试就知道效果了)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//
注意:添加3秒睡眠,以确保黑屏一会儿的效果明显,在项目应用要去掉这3秒睡眠
try {
Thread.sleep(3000);
} catch (InterruptedException
e) {
e.printStackTrace();
}
setContentView(R.layout.activity_launcher);
//
停留3秒后发送消息,跳转到MainActivity
mHandler.sendEmptyMessageDelayed(MSG_FINISH_LAUNCHERACTIVITY, 3000);
}
}
activity_launcher.xml布局文件,很简单,要记住这里的LinearLayout使用的背景是layout_list_start_pic,跟主题theme使用一样的背景,这样就消除了背景不一样的效果。这里要自己试试才知道这样做的好处和效果。
1
2
3
4
5
6
7
8
9
10
11
12
13
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/layout_list_start_pic" > android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ffffff" android:text="@string/hello_world" />
AndroidManifest.xml,这里注意application使用的theme是AppTheme,而LauncherActivity使用的主题是StartAppTheme。这样做的效果是只要LauncherActivity使用StartAppTheme主题,其他Activity都是用AppTheme主题哦。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.launcheractivity" android:versionCode="1" android:versionName="1.0" > android:minSdkVersion="8" android:targetSdkVersion="18" /> android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > android:name=".LauncherActivity" android:label="@string/app_name" android:theme="@style/StartAppTheme" > android:name="android.intent.action.MAIN" /> android:name="android.intent.category.LAUNCHER" /> android:name=".MainActivity">
styles.xml,2个主题设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
xmlns:android="http://schemas.android.com/apk/res/android">
layout_list_start_pic.xml 启动页面使用这个作为背景图片
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android" > > android:color="@color/white"/> > android:gravity="center" android:src="@drawable/ic_launcher" /> android:bottom="10dp"> android:gravity="bottom|center_horizontal" android:src="@drawable/copyright" />
还有一张图片copyright.png
好了现在提供下效果图吧
启动时,黑屏白屏改造成这图片样子,哈哈~
启动完成后加装的LauncherActivity界面
调整到MainActivity界面