【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面

【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面

jingqing

发表于 2013-7-11 14:42:02 浏览(229501)


这篇文章算是对整个引导界面开发专题的一个终结了吧,个人觉得大部分的引导界面基本上都是千篇一律的,只要熟练掌握了一个,基本上也就没什么好说的了,要是在今后的开发中遇到了更好玩,更有趣的引导界面,博主也会在这里及时的跟大家分享,今天的内容主要是教大家的应用程序只有在第一次启动的时候显示引导界面,以后在启动程序的时候就不再显示了。

其实要想实现这样的效果,只要使用SharedPreferences类,就会让程序变的非常简单,下面来详细介绍一下这个类的使用方法

一、SharedPreferences的详细介绍和用法

SharedPreferences介绍:       做软件开发应该都知道,很多软件会有配置文件,里面存放这程序运行当中的各个属性值,由于其配置信息并不多,如果采用数据库来存放并不划算,因为数据库连接跟操作等耗时大大影响了程序的效率,因此我们使用键值这种一一对应的关系来存放这些配置信息。SharedPreferences正是Android中用于实现这中存储方式的技术。

SharedPreferences的使用非常简单,能够轻松的存放数据和读取数据。SharedPreferences只能保存简单类型的数据,例如,String、int等。一般会将复杂类型的数据转换成Base64编码,然后将转换后的数据以字符串的形式保存在 XML文件中,再用SharedPreferences保存。

SharedPreferences使用方法:

<1> 使用Activity类的getSharedPreferences方法获得SharedPreferences对象,其中存储key-value的文件的名称由getSharedPreferences方法的第一个参数指定;

<2> 使用SharedPreferences接口的edit获得SharedPreferences.Editor对象;

<3> 通过SharedPreferences.Editor接口的putXxx方法保存key-value对。其中Xxx表示不同的数据类型。例如:字符串类型的value需要用putString方法;

<4> 通过SharedPreferences.Editor接口的commit方法保存key-value对。commit方法相当于数据库事务中的提交(commit)操作。

具体代码的书写流程为:

A、存放数据信息

<1> 打开Preferences,名称为setting,如果存在则打开它,否则创建新的Preferences

SharedPreferences settings = getSharedPreferences(“setting”, 0);

<2> 让setting处于编辑状态

SharedPreferences.Editor editor = settings.edit();

<3> 存放数据

editor.putString(“name”,”ATAAW”);
         editor.putString(“URL”,”ATAAW.COM”);

<4> 完成提交

editor.commit();

B、读取数据信息

<1> 获取Preferences

SharedPreferences settings = getSharedPreferences(“setting”, 0);

<2> 取出数据

String name = settings.getString(“name”,”默认值”);
         String url = setting.getString(“URL”,”default”);

以上就是SharedPreferences的使用方法,其中创建的Preferences文件存放位置可以在Eclipse中查看:

DDMS->File Explorer /<package name>/shared_prefs/setting.xml

二、实现的效果图

第一次启动程序:欢迎界面-->引导界面-->主页面

以后启动程序:启动页-->系统主页

第一次启动时的效果图

欢迎界面:

引导界面效果图1:

引导界面效果图2:

进入主页面:

以后启动程序的效果图

欢迎界面:

程序主页面:

三、程序的目录结构


四、具体的实现编码

1、  在引导布局界面中加入ViewPager组件,activity_guide.xml:

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content" >
  5. <android.support.v4.view.ViewPager
  6. android:id="@+id/viewpager"
  7. android:layout_width="fill_parent"
  8. android:layout_height="fill_parent" />
  9. </RelativeLayout>

复制代码

2、接着在guide_view01.xml等几个布局页面中添加引导界面要显示的图片和控件,因为这几个布局界面都大同小异,所以在这里我就不一一贴出来了吧,有需要的同学可以直接下载源码,guide_view01.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="@drawable/star_img1"
  6. android:orientation="vertical" >
  7. </RelativeLayout>

复制代码

3、然后是欢迎界面的布局界面,activity_welcome:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical"
  6. android:background="@drawable/welcome_background">
  7. </LinearLayout>

复制代码

4、最后是主界面的布局,activity_main:

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content" >
  5. <TextView
  6. android:id="@+id/textView1"
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:layout_alignParentLeft="true"
  10. android:layout_alignParentTop="true"
  11. android:text="欢迎来到主页面!"
  12. android:textSize="25sp"/>
  13. </RelativeLayout>

复制代码

5、在这里还要创建一个xml文件来实现自定义按钮的效果,关于自定义按钮的效果实现我会在后面的文章中专题详细介绍,这里就不在赘述start_btn.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:state_enabled="true" android:state_pressed="true"
  4. android:drawable="@drawable/login_button_select" /> <!--按下时的效果-->
  5. <item android:state_enabled="true" android:drawable="@drawable/login_button" />  <!--正常状态的效果-->
  6. </selector>

复制代码

6、布局界面已经讲解完毕,接下来让我们进行详细的代码讲解,ViewPager适配器代码,ViewPagerAdapter.java:

  1. package com.yangyu.myguideview04;
  2. import java.util.ArrayList;
  3. import android.support.v4.view.PagerAdapter;
  4. import android.support.v4.view.ViewPager;
  5. import android.view.View;
  6. /**
  7. * @author yangyu
  8. *        功能描述:ViewPager适配器,用来绑定数据和view
  9. */
  10. public class ViewPagerAdapter extends PagerAdapter {
  11. //界面列表
  12. private ArrayList<View> views;
  13. public ViewPagerAdapter (ArrayList<View> views){
  14. this.views = views;
  15. }
  16. /**
  17. * 获得当前界面数
  18. */
  19. @Override
  20. public int getCount() {
  21. if (views != null) {
  22. return views.size();
  23. }
  24. return 0;
  25. }
  26. /**
  27. * 初始化position位置的界面
  28. */
  29. @Override
  30. public Object instantiateItem(View view, int position) {
  31. ((ViewPager) view).addView(views.get(position), 0);
  32. return views.get(position);
  33. }
  34. /**
  35. * 判断是否由对象生成界面
  36. */
  37. @Override
  38. public boolean isViewFromObject(View view, Object arg1) {
  39. return (view == arg1);
  40. }
  41. /**
  42. * 销毁position位置的界面
  43. */
  44. @Override
  45. public void destroyItem(View view, int position, Object arg2) {
  46. ((ViewPager) view).removeView(views.get(position));
  47. }
  48. }

复制代码

7、引导界面Activity,GuideActivity.java:

  1. package com.yangyu.myguideview04;
  2. import java.util.ArrayList;
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.support.v4.view.ViewPager;
  7. import android.support.v4.view.ViewPager.OnPageChangeListener;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.View.OnClickListener;
  11. import android.widget.Button;
  12. /**
  13. * @author yangyu
  14. *  功能描述:引导界面activity类
  15. */
  16. public class GuideActivity extends Activity implements OnPageChangeListener{
  17. // 定义ViewPager对象
  18. private ViewPager viewPager;
  19. // 定义ViewPager适配器
  20. private ViewPagerAdapter vpAdapter;
  21. // 定义一个ArrayList来存放View
  22. private ArrayList<View> views;
  23. // 定义各个界面View对象
  24. private View view1, view2, view3, view4;
  25. //定义开始按钮对象
  26. private Button startBt;
  27. @Override
  28. protected void onCreate(Bundle savedInstanceState) {
  29. super.onCreate(savedInstanceState);
  30. setContentView(R.layout.activity_guide);
  31. initView();
  32. initData();
  33. }
  34. /**
  35. * 初始化组件
  36. */
  37. private void initView() {
  38. //实例化各个界面的布局对象
  39. LayoutInflater mLi = LayoutInflater.from(this);
  40. view1 = mLi.inflate(R.layout.guide_view01, null);
  41. view2 = mLi.inflate(R.layout.guide_view02, null);
  42. view3 = mLi.inflate(R.layout.guide_view03, null);
  43. view4 = mLi.inflate(R.layout.guide_view04, null);
  44. // 实例化ViewPager
  45. viewPager = (ViewPager) findViewById(R.id.viewpager);
  46. // 实例化ArrayList对象
  47. views = new ArrayList<View>();
  48. // 实例化ViewPager适配器
  49. vpAdapter = new ViewPagerAdapter(views);
  50. //实例化开始按钮
  51. startBt = (Button) view4.findViewById(R.id.startBtn);
  52. }
  53. /**
  54. * 初始化数据
  55. */
  56. private void initData() {
  57. // 设置监听
  58. viewPager.setOnPageChangeListener(this);
  59. // 设置适配器数据
  60. viewPager.setAdapter(vpAdapter);
  61. //将要分页显示的View装入数组中
  62. views.add(view1);
  63. views.add(view2);
  64. views.add(view3);
  65. views.add(view4);
  66. // 给开始按钮设置监听
  67. startBt.setOnClickListener(new OnClickListener() {
  68. @Override
  69. public void onClick(View v) {
  70. startbutton();
  71. }
  72. });
  73. }
  74. @Override
  75. public void onPageScrollStateChanged(int arg0) {
  76. }
  77. @Override
  78. public void onPageScrolled(int arg0, float arg1, int arg2) {
  79. }
  80. @Override
  81. public void onPageSelected(int arg0) {
  82. }
  83. /**
  84. * 相应按钮点击事件
  85. */
  86. private void startbutton() {
  87. Intent intent = new Intent();
  88. intent.setClass(GuideActivity.this,MainActivity.class);
  89. startActivity(intent);
  90. this.finish();
  91. }

复制代码

8、欢迎界面Activity,Welcome.java:

  1. package com.yangyu.myguideview04;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.content.SharedPreferences;
  5. import android.content.SharedPreferences.Editor;
  6. import android.os.Bundle;
  7. /**
  8. * @author yangyu
  9. *  功能描述:欢迎界面
  10. */
  11. public class Welcome extends Activity implements Runnable {
  12. //是否是第一次使用
  13. private boolean isFirstUse;
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_welcome);
  17. /**
  18. * 启动一个延迟线程
  19. */
  20. new Thread(this).start();
  21. }
  22. public void run() {
  23. try {
  24. /**
  25. * 延迟两秒时间
  26. */
  27. Thread.sleep(2000);
  28. //读取SharedPreferences中需要的数据
  29. SharedPreferences preferences = getSharedPreferences("isFirstUse",MODE_WORLD_READABLE);
  30. isFirstUse = preferences.getBoolean("isFirstUse", true);
  31. /**
  32. *如果用户不是第一次使用则直接调转到显示界面,否则调转到引导界面
  33. */
  34. if (isFirstUse) {
  35. startActivity(new Intent(Welcome.this, GuideActivity.class));
  36. } else {
  37. startActivity(new Intent(Welcome.this, MainActivity.class));
  38. }
  39. finish();
  40. //实例化Editor对象
  41. Editor editor = preferences.edit();
  42. //存入数据
  43. editor.putBoolean("isFirstUse", false);
  44. //提交修改
  45. editor.commit();
  46. } catch (InterruptedException e) {
  47. }
  48. }
  49. }

复制代码

在欢迎界面中使用了SharedPreferences来读取用户的信息,判断是否是第一次使用程序,这里的isFirstUse可以根据读者的需要换成任意类型,只要给它加一个判断就行了
9、主界面Activity,这里就加载了一个简单的布局文件,读者可以根据需要对该类进行扩展,MainActivity.java:

  1. package com.yangyu.myguideview04;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. /**
  5. * @author yangyu
  6. *   功能描述:主程序入口类页面
  7. */
  8. public class MainActivity extends Activity {
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_main);
  13. }
  14. }

复制代码

引导界面的专题就告一段落了,接下来会以主页面的UI设计为专题进行详细的实战讲解,希望大家能继续关注该系列文章。
 MyGuideView04.zip (1.9 MB, 下载次数: 1323)

评分

参与人数 1 下载豆 +10 收起理由
 jnhoodlum + 10 安卓巴士感谢您的分享!

查看全部评分

来源: <http://www.apkbus.com/android-125513-1-1.html?from=threadlink>

来自为知笔记(Wiz)

时间: 2024-10-07 06:38:37

【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面的相关文章

【转】【Android UI设计与开发】第07期:底部菜单栏(二)Fragment的详细介绍和使用方法

原始地址:http://blog.csdn.net/yangyu20121224/article/category/1431917/1 由于TabActivity在Android4.0以后已经被完全弃用,那么我就不再浪费口水继续讲解它了,取而代之的是Fragment.Fragment是Android3.0新增的概念,Fragment翻译成中文是碎片的意思,不过却和Activity十分的相似,这一篇我花大量的篇幅来详细的讲解Fragment的介绍和使用方法. 一.Fragment的基础知识介绍  

【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面

大部分的引导界面基本上都是千篇一律的,只要熟练掌握了一个,基本上也就没什么好说的了,要想实现应用程序只启动一次引导界面这样的效果,只要使用SharedPreferences类,就会让程序变的非常简单,下面来详细介绍一下这个类的使用方法 1.SharedPreferences的详细介绍和用法 其实在 20.游戏开发基础(游戏数据存储)中已经有过介绍了,为了文章的完整还是再介绍一遍. 做软件开发应该都知道,很多软件会有配置文件,里面存放这程序运行当中的各个属性值,由于其配置信息并不多,如果采用数据库

【Android UI设计与开发】第07期:底部菜单栏(二)Fragment的详细介绍和使用方法

转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/8995025 由于TabActivity在Android4.0以后已经被完全弃用,那么我就不再浪费口水继续讲解它了,取而代之的是Fragment.Fragment是Android3.0新增的概念,Fragment翻译成中文是碎片的意思,不过却和Activity十分的相似,这一篇我花大量的篇幅来详细的讲解Fragment的介绍和使用方法. 一.Fragment的基础知识介绍  

【Android UI设计与开发】7.底部菜单栏(四)PopupWindow 实现显示仿腾讯新闻菜单

前一篇文章中有用到 PopupWindow 来实现弹窗的功能.简单介绍以下吧. 官方文档是这样解释的:这就是一个弹出窗口,可以用来显示一个任意视图.出现的弹出窗口是一个浮动容器的当前活动. 1.首先来个简单的栗子,效果如下: 只有两个布局文件,一个是弹窗布局(只有一张图片),一个是主界面布局(只有一个按钮). 然后在主界面代码中实例 PopupWindow ,指定弹出的界面,在按钮点击事件中显示或隐藏弹窗就可以了,代码如下: package com.yanis.demo; import andr

【Android UI设计与开发】第06期:底部菜单栏(一)使用TabActivity实现底部菜单栏

转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/8989063       从这一篇文章开始,我们将进入到一个应用程序主界面UI的开发和设计中了,底部菜单栏在Android的应用开发当中占有非常重要的地位.几乎所有的手机应用程序都有底部菜单栏这样的控件,主要是因为手机的屏幕大小有限,这样一种底部菜单栏实现起来的效果可以很方便的为用户切换自己所需要的界面,具有更强的交互性.底部菜单栏的样式和效果也是五花八门,多的数不胜数,但是

【Android UI设计与开发】第09期:底部菜单栏(四)Fragment+PopupWindow仿QQ空间最新版底部菜单栏

转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9023451          在今天的这篇文章当中,我依然会以实战加理论结合的方式教大家如何设计出自己觉得很炫的UI界面.好的,话不多说,进入正题.今天的这篇文章主要是以仿QQ空间的底部菜单栏效果为主,实现的效果有: <1>实现了点击按钮时的切换图片效果: <2>实现了点击按钮时的切换界面效果: <3>实现了点击中间圆形按钮时弹出菜单以及按钮图片切

【Android UI设计与开发】第10期:顶部标题栏(一)ActionBar详细概述和简单示例

转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9042387   由于是刚开始写博客,所以一开始在格式上也没有太在意,今天偶然间翻阅自己的博客,却发现字体.代码以及图片什么的都几乎快挤到了一起,自己都觉得看着很难受,更别说别的读者了.为了大家能够读的清楚.看的明白,今天博主稍微花了一点时间把这个专题前几期文章的标题和格式全都改了一遍.希望读者们继续支持,你们的支持也是我最大的动力! 一.ActionBar介绍 在Andro

【Android UI设计与开发】第13期:顶部标题栏(四)自定义ActionBar风格和样式

转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9087941   这篇文章将对ActionBar专题前面几篇学习过的内容做一个总结,顺便运用以前学过的知识实现一个自定义样式的ActionBar标题栏效果.话不多说,进入今天的正题. 一.实现效果图 竖屏效果图:最左边是Logo图标,右边是工具栏按钮,点击Menu键显示其余的按钮键,下方是Tab标签选项. 横屏效果图:竖屏中的Tab选项标签变成了中间的下拉导航按钮 二.项目结

【Android UI设计与开发】第16期:滑动菜单栏(一)开源项目SlidingMenu的使用

转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9255829   由于最近的工作确实比较忙的原因,所以这个系列的教程有一段时间没有更新了,也请各位读者见谅.这期博主要给大家带来的是关于滑动菜单栏的实现效果. 一.SlidingMenu简介 相信大家对SlidingMenu都不陌生了,它是一种比较新的设置界面或配置界面的效果,在主界面左滑或者右滑出现设置界面效果,能方便的进行各种操作.很多优秀的应用都采用了这种界面方案,像f