android应用程序第一次启动时显示引导界面
市面上好多优秀的应用(举例新浪微博、UC浏览器)都采用了欢迎页面与使用向导的方式给用户带来了良好的用户体验。
一般来说用户第一次安装应用或者安装了新版本后第一次进入应用都会显示成 欢迎页面-使用向导-主界面 的方式
用户没有安装新版本或者不是第一次进入的时候都会显示成 欢迎页面-主界面的方式
想要实现这种不同的分支,我们就要使用一种变量来存储我们是否是第一次进入应用,当然这种变量不可能是存储在应用里,而是要存储在应用包名底下的文件中
那么我们就来看看实现这种变量存储和修改的步骤吧
1、在应用的欢迎页面Splash Activity里定义一个变量isFirstIn(前一篇文章中讲了Splash),初始值无所谓,应为我们马上要从文件中读取这个值
2、定义SharedPreferences对象,并通过该对象获取文件中isFirstIn键(key)对应的值(value),这里默认为true,因为第一次进入应用时我们并没有创建该文件和该变量
3、在Splash中需要跳转的地方做一个if判断,如果是isFirstIn是true说明我们是第一次进入,那么跳转到GuideActivity1,如果是false说明我们不是第一次进入,那么跳转到主页面MainActivity
4、假如GuideActivity1是最后一个使用向导页,我们要在GuideActivity1结束之后默认跳转到MainActivity里,那么我们需要在跳转之前改变一下isFirstIn值为false,并存到文件里,这样下次进入应用时Splash可以从文件里获取值为false的isFirstIn值,这样就可以通过分支直接跳转到MainActivity了
下面关键部分的代码
Splash.Java
boolean isFirstIn = false;
//onCreate中
SharedPreferences preferences = getSharedPreferences("first_pref",
MODE_PRIVATE);
isFirstIn = preferences.getBoolean("isFirstIn", true);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (isFirstIn) {
// start guideactivity1
intent = new Intent(Splash.this, GuideActivity1.class);
} else {
// start TVDirectActivity
intent = new Intent(Splash.this, TVDirectActivity.class);
}
Splash.this.startActivity(intent);
Splash.this.finish();
}
}, SPLASH_DISPLAY_LENGHT);
GuideActivity1.java 在引导页面结束前一定要修改SharedPreferences里边的值,这样第二次进入的话才会跳转到主页面,不进引导页。
SharedPreferences preferences = getSharedPreferences(
"first_pref", MODE_PRIVATE);
Editor editor = preferences.edit();
editor.putBoolean("isFirstIn", false);
editor.commit();
最后可以在应用包名底下shared_prefs文件夹下找到我们在应用里定义的first_pref.xml文件,打开可以看到里面
这种使用SharedPreferences存储变量的方法不仅可以使用与欢迎页面与使用向导,可以随意在程序任何位置使用,用来存储应用退出之后也要记录的某些关键变量或值
android应用程序第一次启动时显示引导界面的更多相关文章
- android实现应用程序仅仅有在第一次启动时显示引导界面
概述 SharedPreferences的使用很easy,可以轻松的存放数据和读取数据.SharedPreferences仅仅能保存简单类型的数据,比如,String.int等.通常会将复杂类型的数据 ...
- 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面
[Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...
- 【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面
大部分的引导界面基本上都是千篇一律的,只要熟练掌握了一个,基本上也就没什么好说的了,要想实现应用程序只启动一次引导界面这样的效果,只要使用SharedPreferences类,就会让程序变的非常简单, ...
- Android应用第一次启动时的欢迎界面制作
原理是这样,我们在SharedPreferences中存储一个int型数据,用来代表第几次登录,每次启动时都读取出来判断是不是第一次启动,然后依次判断是否要显示欢迎界面, 具体实现如下: 设置一个欢迎 ...
- IOS开发中如何判断程序第一次启动(根据判断结果决定是否显示新手操作引导)
IOS开发中如何判断程序第一次启动 在软件下载安装完成后,第一次启动往往需要显示一个新手操作引导,来告诉用户怎么操作这个app,这就需要在程序一开始运行就判断程序是否第一次启动,如果是,则显示新手操作 ...
- Android Studio的安装及第一次启动时的配置
Android Studio的安装及第一次启动时的配置 一.下载Android Studio 百度搜索“Android Studio" 点击中文社区进入,选择最新版本下载. 下载后双击安装包 ...
- Android应用程序内部启动Activity过程(startActivity)的源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6703247 上文介绍了Android应用程序的 ...
- Android应用程序进程启动过程的源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址: http://blog.csdn.net/luoshengyang/article/details/6747696 Android 应用程序框架层创 ...
- vue隐藏APP启动时显示的{{}}
vue隐藏APP启动时显示的{{}} vue组件在编译好之前会显示{{msg}},在官网上找到这个
随机推荐
- dotNet平台模板列中的单选无效的解决方案
最近在grid里添加一个单选列,最开始直接创建一个模板列,然后在模板列里放一个radiobutton.并指定其GroupName.这是radiabutton最常用的方法.但是在Grid里,这样却毫无效 ...
- html5 第一天
html4与html5的琐碎比较,不全,第一次写,望多多包涵. 一 兼容性:html5在老版本的浏览器上也可以运行 二 实用性:HYML5都是封装的简单使用功能 三非革命性的发展 Html5向前兼容, ...
- hashMap 深入理解
1.java 的hashMap 是通过 链地址 法来解决 hash冲突的 2.初始时是一个empty table, 第一次添加数据时检查到时空数组就会 生成指定容量的数组,也就是 在第一次使用时才初始 ...
- Thrift的TJsonProtocol协议分析
Thrift协议实现目前有二进制协议(TBinaryProtocol),紧凑型二进制协议(TCompactProtocol)和Json协议(TJsonProtocol). 前面的两篇文字从编码和协议原 ...
- C#操作mysql数据库
转 http://www.jb51.net/article/43486.htm using System;using System.Configuration;using MySql.Data.My ...
- linux命令crontab
1.需求 服务端计划任务执行 2.例子 使用crontab命令 参考:http://justjavac.com/other/2013/09/22/linux-scheduled-task-cronta ...
- robotframework,selenium启动不了打不开浏览器的问题访问不了网页
由于最近发现咨询火狐浏览器打不开的问题比较多,现罗列几点解决办法. 1,由于selenium更新3.0的原因导致不在默认支持火狐浏览器,且支持的火狐浏览器大概在45以上的版本,所以很多都由于这个原因导 ...
- mysql使用load导入txt文件所遇到的问题及解决方法
导入txt文件,有导入向导这种方式: 另外可以使用load的方式导入.最开始使用以下代码插入: load data local infile 'F:\\Data\\predict_data.txt' ...
- Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站
http://www.cnblogs.com/zhongweiv/archive/2013/01/07/https.html 配置环境 了解HTTPS 配置CA证书服务器 新建示例网站并发布在IIS ...
- ExecutorService线程池
ExecutorService 建立多线程的步骤: 1.定义线程类 class Handler implements Runnable{} 2.建立ExecutorService线程池 Executo ...