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

来源:互联网 发布:one域名备案 编辑:程序博客网 时间:2024/05/21 18:30
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;@Overrideprotected 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;@Overrideprotected 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. */@Overridepublic 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 finishshowSplashScreen();}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}}


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


0 0