Android 系列 2.6在Android中创建Splash屏幕

263 篇文章 2 订阅
164 篇文章 0 订阅
2.6在Android中创建Splash屏幕


问题
您想创建一个启动屏幕,将在加载应用程序时显示。

您可以将启动屏幕构建为活动或对话框。由于它的目的是在几秒钟内完成,它可以在短时间间隔过去之后或点击启动屏幕中的按钮时被关闭。
讨论
闪屏是在PC时代发明的,最初作为一个掩盖为慢的GUI构建,当电脑慢时。供应商保留他们的品牌。但在移动世界中,最长的应用程序启动时间可能不到一秒钟,人们开始意识到,闪屏已经变得有些不合时宜。当我在电子卫生创新工作时,我们认识到这一点,使我们的BANT应用程序的闪屏在短短一秒钟后消失。问题出现了,我们是否仍然需要闪屏,或者是时候退出闪屏的想法。与大多数移动应用一样,名称和徽标显示在应用启动器中,我们还有许多其他屏幕,其中显示了名称和徽标。是时候让闪屏消失吗?
这个问题的答案取决于你和你的组织。为了完整性,这里有两种处理应用程序启动屏幕的方法。
第一个版本使用专用于显示启动屏幕的活动。启动屏幕显示两秒钟或直到用户按下菜单键,然后应用程序的主要活动出现。首先我们使用线程等待固定秒数,然后我们使用意图启动真正的主要活动。这个方法的一个缺点是,你的AndroidManifest.xml文件中的“主要”活动是splash活动,而不是你的真正的主要活动。例2-5显示了飞溅活动。

实施例2-5。飞溅活动

public class SplashScreen extends Activity {
private long ms=0;
private long splashTime=2000;
private boolean splashActive = true;
private boolean paused=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
Thread mythread = new Thread() {
public void run() {
try {
while (splashActive && ms < splashTime) {
if(!paused)
ms=ms+100;
sleep(100);
}
} catch(Exception e) {}
finally {
Intent intent = new Intent(SplashScreen.this, Main.class);
startActivity(intent);
}
}
};
mythread.start();
}
}


例子 2-6 显示splash活动的布局,splash.xml。

例 2-6. The splash layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView android:src="@drawable/background"
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ProgressBar android:id="@+id/progressBar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
</ProgressBar>
</LinearLayout>


一个额外的要求是将属性android:noHistory =“true”放在AndroidManifest.xml文件中的splash活动上,以便此活动不会出现在历史堆栈中,这意味着如果用户使用主应用程序中的“后退”按钮 会去预期的主屏幕,不回到你的启动屏幕! 参见图2-2。


图2-2。 飞溅屏幕
两秒钟后,此活动将导致下一个活动,这是标准的“Hello,World”Android活动,作为主应用程序主要活动的代理。 参见图2-3。


图2-3。 “主要活动
在第二个版本中(启动屏幕显示,直到在Android设备上的菜单按钮被按下,然后应用程序的主要活动出现,为此,我们添加一个Java类,显示启动屏幕。 的菜单键,通过检查KeyCode然后完成活动。

例子 2-7. Watching for KeyCodes

public class SplashScreen extends Activity {
private long ms=0;
private long splashTime=2000;
private boolean splashActive = true;
private boolean paused=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
super.onKeyDown(keyCode, event);
if (KeyEvent.KEYCODE_MENU == keyCode) {
Intent intent = new Intent(SplashScreen.this, Main.class);
startActivity(intent);
}
if (KeyEvent.KEYCODE_BACK == keyCode) {
finish();
}
return false;
}
}


splash活动的布局splash.xml与早期版本不同。
与之前一样,按下按钮后,此活动将导向下一个活动,代表主要活动。
另一个主要方法是使用一个对话框,从你的main方法中的onCreate()方法开始。 这有许多优点,包括更简单的活动堆栈和事实,你不需要一个额外的活动,只用于前几秒钟。 缺点是它需要一些更多的代码,你可以看到在例2-8。
实施例2-8。 弹出对话框

public class SplashDialog extends Activity {
private Dialog splashDialog;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
StateSaver data = (StateSaver) getLastNonConfigurationInstance();
if (data != null) { // "all this has happened before"
if (data.showSplashScreen ) { // and we didn't already finish
showSplashScreen();
}
setContentView(R.layout.main);
// Do any UI rebuilding here using saved state
} else {
showSplashScreen();
setContentView(R.layout.main);
// Start any heavy-duty loading here, but on its own thread
}
}


基本思想是在应用程序启动时显示启动对话框,但是如果在启动屏幕运行时遇到方向改变,还要重新显示它,并且小心地在正确的时间删除它,如果用户 退出或者在启动屏幕运行时定时器到期。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值