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}},在官网上找到这个
随机推荐
- 在Unity中使用UGUI修改Mesh绘制几何图形
在商店看到这样一个例子,表示很有兴趣,他们说是用UGUI做的.我想,像这种可以随便变形的图形,我第一个就想到了网格变形. 做法1: 细心的朋友应该会发现,每个UGUI可见元素,都有一个‘Canvas ...
- [Algorithm] 群体智能优化算法之粒子群优化算法
同进化算法(见博客<[Evolutionary Algorithm] 进化算法简介>,进化算法是受生物进化机制启发而产生的一系列算法)和人工神经网络算法(Neural Networks,简 ...
- 第三篇 基于.net搭建热插拔式web框架(重造Controller)
由于.net MVC 的controller 依赖于HttpContext,而我们在上一篇中的沙箱模式已经把一次http请求转换为反射调用,并且http上下文不支持跨域,所以我们要重造一个contro ...
- 兼容8事件绑定与解绑addEventListener、removeEventListener和ie的attachEvent、detachEvent
兼容8事件绑定与解绑addEventListener.removeEventListener和ie的attachEvent.detachEvent ;(function(){ // 事件绑定 bi ...
- 微软KinectV2深度传感器在Ubuntu上的配置和使用
最新博客地址已转到: http://blog.csdn.net/zzlyw?viewmode=contents ------------------------------------------ ...
- mysql中的行转列
//查看当前商品库存 function checkProductStock($product_id){ global $wpdb; $sql="SELECT post_id,max(if(( ...
- 一堆LCT板子
搞了一上午LCT,真是累死了-- 以前总觉得LCT高大上不好学不好打,今天打了几遍感觉还可以嘛= =反正现在的水平应付不太难的LCT题也够用了,就这样好了,接下来专心搞网络流. 话说以前一直YY不出来 ...
- erlang 在线生成crashdump
一般说来抓dump 4种 方式: 1. erlang:halt(“abort”). 2. 在erlang shell下输入CTRL C + “大写的A” 3.等着进程崩溃 ...
- Android 自动安装脚本
建立一个install.bat,写入下面 adb install -r %1PAUSE 把apk拖拽到install.bat上
- Qt json 数据处理
用到的头文件 #include <QJsonArray> #include <QJsonDocument> #include <QJsonObject> json解 ...