创建Android启动界面

每个Android应用启动之后都会出现一个Splash启动界面,显示产品的LOGO、公司的LOGO或者开发者信息。如果应用程序启动时间比较长,那么启动界面就是一个很好的东西,可以让用户耐心等待这段枯燥的时间。

  • 制作Splash界面
    突出产品LOGO,产品名称,产品主要特色;
    注明产品的版本信息;
    注明公司信息或者开发者信息;
    背景图片,亦可以用背景颜色代替;

  • 除了等待还能做点什么
    大多数的Splash界面都是会等待一定时间,然后切换到下一个界面;
    其实,在这段时间里,可以对系统状况进行检测,比如网络是否通,电源是否充足;
    或者,预先加载相关数据;
    为了能让启动界面展现时间固定,需要计算执行以上预处理任务所花费的时间,那么:启动界面SLEEP的时间=固定时间-预处理任务时间

  • 源码示例(以Wordpress的Android客户端为例)
    AndroidMenifest.xml
    <activity android:icon="@drawable/app_icon"
    android:screenOrientation
    ="portrait"
    android:name
    =".splashScreen"
    android:theme
    ="@android:style/Theme.NoTitleBar">
    <intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
    </activity>
    splashScreen.java
    package org.wordpress.android;

    import android.app.Activity;
    import android.content.Intent;
    import android.content.pm.PackageInfo;
    import android.content.pm.PackageManager;
    import android.content.pm.PackageManager.NameNotFoundException;
    import android.graphics.PixelFormat;
    import android.os.Bundle;
    import android.os.Handler;
    import android.view.WindowManager;
    import android.widget.TextView;


    public class splashScreen extends Activity {
    /**
    * Called when the activity is first created.
    */

    @Override
    public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    getWindow().setFormat(PixelFormat.RGBA_8888);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);

    setContentView(R.layout.splashscreen);

    //Display the current version number
    PackageManager pm = getPackageManager();
    try {
    PackageInfo pi
    = pm.getPackageInfo("org.wordpress.android", 0);
    TextView versionNumber
    = (TextView) findViewById(R.id.versionNumber);
    versionNumber.setText(
    "Version " + pi.versionName);
    }
    catch (NameNotFoundException e) {
    e.printStackTrace();
    }

    new Handler().postDelayed(new Runnable() {
    public void run() {
    /* Create an Intent that will start the Main WordPress Activity. */
    Intent mainIntent
    = new Intent(splashScreen.this, wpAndroid.class);
    splashScreen.
    this.startActivity(mainIntent);
    splashScreen.
    this.finish();
    }
    },
    2900); //2900 for release

    }
    }
    splashscreen.xml
    <!--
    android:gravity是对元素本身说的,元素本身的文本显示在什么地方靠着换个属性设置,不过不设置默认是在左侧的。
    android:layout_gravity是相对与它的父元素说的,说明元素显示在父元素的什么位置
    -->
    <LinearLayout android:id="@+id/LinearLayout01"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="fill_parent"
    xmlns:android
    ="http://schemas.android.com/apk/res/android"
    android:gravity
    ="center|center"
    android:background
    ="@drawable/home_gradient"
    android:orientation
    ="vertical">
    <!--
    android:scaleType是控制图片如何resized/moved来匹对ImageView的size
    CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽
    -->
    <ImageView android:layout_marginTop="-60dip"
    android:paddingLeft
    ="20dip"
    android:paddingRight
    ="20dip"
    android:scaleType
    ="centerInside"
    android:layout_width
    ="wrap_content"
    android:layout_height
    ="wrap_content"
    android:id
    ="@+id/wordpress_logo"
    android:src
    ="@drawable/wordpress_home">
    </ImageView>
    <!--
    android:typeface 字体风格
    -->
    <TextView android:text="@+id/TextView01"
    android:layout_width
    ="wrap_content"
    android:layout_height
    ="wrap_content"
    android:layout_marginTop
    ="20dip"
    android:typeface
    ="serif"
    android:shadowDx
    ="0"
    android:shadowDy
    ="2"
    android:shadowRadius
    ="1"
    android:shadowColor
    ="#FFFFFF"
    android:textColor
    ="#444444"
    android:textSize
    ="20dip"
    android:id
    ="@+id/versionNumber"
    android:gravity
    ="bottom">
    </TextView>
    </LinearLayout>
posted @ 2011-05-17 22:04  熊波  阅读(59314)  评论(4编辑  收藏  举报