首页|系部概况|新闻动态|教学工作|招生就业|党政专栏|技能大赛|技术文章|大学生活|下载中心
热烈庆祝我院应届毕业生就业率再创佳绩,遥祝我院毕业生工作顺利!
 
当前位置: 首页>>技术文章>>技术文章>>正文
 

Android手机卫士(一):实现splash
2017-03-24 15:41  

从今天开始根据之前学习的android的基础知识,实战一下,实现一个简单功能的android手机卫士。

  手机卫士的主要功能如下:

  什么是Splash

  Splash也就是应用程序启动之前先启动一个画面,上面简单的介绍应用程序的厂商,厂商的LOGO,名称和版本等信息,多为一张图片,显示几秒钟后会自动消息,然后显示出应用程序的主体页面。在PC上,很常见各种平台的应用程序都会有,多半是一张图片显示在屏幕中央,如Microsoft Office系列,或者GIMP等。在各种游戏中Splash是最常见的,几乎所有的游戏开始都会有一张全屏的图片,上面通常都显示厂商的LOGO,游戏的名称等。在手机平板等移动设备上,类似PC的Splash很少,起码对于Android和iOS来讲原生的应用程序都没有这种Splash,但是不知从何时起,这种Splash开始在第三方应用中流行起来,几乎所有的第三方应用程序都有启动Splash。这些Splash的特点是占满整个屏幕,上面LOGO,厂商的名字,应用的名字版本等,大约3到5秒后,Splash自动消失,应用主页面显示出来。很多应用在Splash页面也显示加载过程。

  使用Activity为Splash

  这可能也是最常用的方式,方法就是用一个Activity,给它设置一个背景,或者要显示的信息(厂商,LOGO,名字和版本),让它显示几秒种,然后finish()掉,并启动应用主体Activity。

  手机卫士的splash页面初步如下:

  splash布局

  相应的代码在布局文件activity_splash.xml文件中:

XML/HTML代码
  1. <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"  

  2.    xmlns:tools="http://schemas.android.com/tools"  

  3.    android:layout_width="match_parent"  

  4.    android:layout_height="match_parent"  

  5.    android:background="@drawable/launcher_bg"  

  6.    tools:context=".SplashActivity">  

  7.  

  8.    <TextView  

  9.        android:id="@+id/tv_version_name"  

  10.        android:layout_width="wrap_content"  

  11.        android:layout_height="wrap_content"  

  12.        android:layout_centerInParent="true"  

  13.        android:shadowColor="#f00"  

  14.        android:shadowDx="1"  

  15.        android:shadowDy="1"  

  16.        android:shadowRadius="1"  

  17.        android:text="版本名"  

  18.        android:textColor="#fff"  

  19.        android:textSize="16sp"/>  

  20.  

  21.    <ProgressBar  

  22.        android:layout_width="wrap_content"  

  23.        android:layout_height="wrap_content"  

  24.        android:layout_centerHorizontal="true"  

  25.        android:layout_below="@+id/tv_version_name"/>  

  26.  

  27. </RelativeLayout>  

  Activity去头操作&保留高版本主题

  接下来去掉头部显示的标题:mobilesafe

  方法1:在指定的activity中添加下面的代码:

Java代码
  1. publicclass SplashActivity extends Activity {  

  2.  

  3.    @Override  

  4.    protectedvoid onCreate(Bundle savedInstanceState) {  

  5.        super.onCreate(savedInstanceState);  

  6.        //去掉当前actinity的tittle  

  7.        requestWindowFeature(Window.FEATURE_NO_TITLE);  

  8.        setContentView(R.layout.activity_splash);  

  9.          

  10.    }  

  11.      

  12. }  

  但是每一个activity都需要去配置,比较麻烦

  方法2:将清单文件中的 android:theme="@style/AppTheme"修改为:android:theme="@android:style/Theme.Light.NoTitleBar"

  可以达到效果,但是主题的其他样式也发生了变化,为了兼容这两方面,修改styles.xml,添加下面的代码:

XML/HTML代码
  1. <!-- Application theme. -->  

  2. <stylename="AppTheme"parent="AppBaseTheme">  

  3.      

  4.    <!-- 在去头的同时还保持高版本的样式主题 -->  

  5.    <!-- All customizations that are NOT specific to a particular API-level can go here. -->  

  6.    <itemname="android:windowNoTitle">true</item>  

  7. </style>  

  搞定

  获取版本名称并且展示

Java代码
  1. publicclass SplashActivity extends Activity {  

  2.  

  3.    private TextView tv_version_name;  

  4.  

  5.    @Override  

  6.    protectedvoid onCreate(Bundle savedInstanceState) {  

  7.        super.onCreate(savedInstanceState);  

  8.        // 去掉当前actinity的tittle  

  9.        // requestWindowFeature(Window.FEATURE_NO_TITLE);  

  10.        setContentView(R.layout.activity_splash);  

  11.  

  12.        // 初始化UI  

  13.        initUI();  

  14.        // 初始化数据  

  15.        initData();  

  16.  

  17.    }  

  18.  

  19.    /**

  20.     * 获取数据方法

  21.     */  

  22.    privatevoid initData() {  

  23.        // 应用版本名称  

  24.        tv_version_name.setText("版本名:" + getVersionName());  

  25.    }  

  26.  

  27.    /**

  28.     * 获取版本名称:清单文件中

  29.     *

  30.     * @return 应用版本名称 返回null代表有异常

  31.     */  

  32.    private String getVersionName() {  

  33.        // 1.管理者对象packageManager  

  34.        PackageManager pm = getPackageManager();  

  35.        // 2.从包的管理者对象中,获取指定包名的基本信息(版本名称,版本号)  

  36.        try {  

  37.            PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), 0);  

  38.            // 3.获取版本名称  

  39.            return packageInfo.versionName;  

  40.        } catch (Exception e) {  

  41.            e.printStackTrace();  

  42.        }  

  43.        returnnull;  

  44.  

  45.    }  

  46.  

  47.    /**

  48.     * 初始化UI方法 alt+shift+j

  49.     */  

  50.    privatevoid initUI() {  

  51.  

  52.        tv_version_name = (TextView) findViewById(R.id.tv_version_name);  

  53.    }  

  54.  

  55. }  

  完成后,运行项目

关闭窗口
读取内容中,请等待...
 

安徽工业经济职业技术学院 计算机与艺术学院  地址:安徽省合肥市梁园路1号
电话:0551-63641254  邮编:230051

您是第 位访问者,欢迎您的到来。