相关文章
简易Android 引导页
在我们的生活中,经常需要使用APP,有很多APP在第一次运行的时候会出现欢迎页或者引导页。
实验要求:
1.显示几秒之后自动跳转到app的主activity。
2.如用户点击“我知道了”按钮,下次启动不再显示欢迎页,否则,仍要仍执行“要求1”。
实现步骤:
1、首先是欢迎页布局文件
activity_welcome_gudie.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_welcome_gudie"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/guide1"
tools:context="com.example.smarttraffic.WelcomeGudie">
<Button
android:layout_width="170dp"
android:layout_height="wrap_content"
android:text="我知道了!"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="84dp"
android:id="@+id/button"
android:textSize="30sp"
android:background="@drawable/button_bg_style"
android:textColor="#ffffff"/>
</RelativeLayout>
布局很简单,只是设置了RelativeLayout的背景图片,然后加了个按钮(可能有人会问我,为什么我的Button更好看一点,点这里看我的另一篇文档,上面有详细说明)
2.接下来是欢迎页java代码
WelcomeGudie.java
package com.example.smarttraffic;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class WelcomeGudie extends AppCompatActivity{
private Button but;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome_gudie);
but = (Button)findViewById(R.id.button);
//“我知道了”按钮点击事件
but.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent1=new Intent();
intent1.putExtra("isClick",true);
setResult(RESULT_OK,intent1);
finish();
}
});
//延时3秒后跳转到MainActivity
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent();
intent.setClass(WelcomeGudie.this, MainActivity.class);
startActivity(intent);
finish();
}
}, 3000);//3秒后执行Runnable中的run方法
}
}
我们先说要求一:“显示几秒之后自动跳转到app的主activity”的实现代码
1,首先创建一个Handler对象
Handler handler = new Handler();
2,然后创建一个Runnable对象,使用PostDelayed方法,三秒后调用此Runnable对象执行run()方法中的代码,将界面跳转到MainActivity中。
然后要求二:“如用户点击“我知道了”按钮,下次启动不再显示欢迎页,否则,仍要仍执行“要求1。”
首先说onClick()中的代码,这里我们主要工作是利用Intent 返回数据给MainActivity
1.首先创建一个Intent对象
Intent intent1=new Intent();
2.然后调用putExtra()方法,putExtra()方法接收两个参数,第一个参数是键,在后面可以从Intent 中通过键来取值,第二个参数是你要传递的数据。
intent1.putExtra(“isClick”,true);
第一个参数isClick,使我们的键,第二个参数传递一个布尔型数据true
3.调用setResult()方法,setResult()方法接收两个参数,第一个参数用于向上一个活动返回处理结果,这里使用RESULT_OK,第二个参数是需要传递数据的Intent ,然后我们填intent1,然后调用finish()方法销毁当前活动。
欢迎页的代码搞定了,然后是主界面的代码
主界面的界面用的是项目自动生成的“Hello World”布局,这就不贴出来了。
下面是MainActivity.java
package com.example.smarttraffic;
import android.content.ContentValues;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity{
public SharedPreferences preferences;
public SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
preferences = getSharedPreferences("data", MODE_PRIVATE);
editor = preferences.edit();
Intent intent = new Intent();
if (preferences.getBoolean("firstClick", true)) {
intent.setClass(this, WelcomeGudie.class);
startActivityForResult(intent,1);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case 1:
if(resultCode == RESULT_OK){
//接收来自WelcomeGudie的数据,判断用户是否点击“我知道了”按钮
if(data.getBooleanExtra("isClick",true)){
editor.putBoolean("firstClick", false);
editor.apply();
}
}
}
}
由于判断用户是否点击了“我知道了”按钮并且需要将此数据存储下来,我们要先简单讲讲SharedPreferences存储的知识。
此程序使用SharedPreferences存储分为几步
1.创建对象
public SharedPreferences preferences;
public SharedPreferences.Editor editor;
2.创建文件,用于数据存放
preferences = getSharedPreferences(“data”, MODE_PRIVATE);
第一个参数data是文件名,名字自己取,第二个参数是指定操作模式,目前只有MODE_PRIVATE可选,表示只有当前应用程序才可以对这个文件进行读写
3.将数据存起来
editor = preferences.edit();
editor.putBoolean(“firstClick”, false);
editor.apply();
存储数据可以用putBoolean()、editor.putString()、editor.putInt()等等,这三种分别可以存储布尔型、字符串、整型数据。第一个参数是键,第二个是你要存储的数据
== 重要的一句 editor.apply(); 该语句作用是将添加的数据提交,完成存储,千万别忘了! ==
4.获取数据
preferences.getBoolean(“firstClick”, true)
知识点说完,现在讲一下程序逻辑
首先看onCreate()里面的那个if,
preferences.getBoolean(“firstClick”, true)的意思是:通过getBoolean()方法查询preferences数据中是否有"firstClick"键,现在程序第一次运行自然要让他进if,所以给ture,然后跳转到欢迎页,startActivityForResult(intent,1);这个方法可以在活动销毁的时候返回一个结果给上一个活动,现在第一次进来这句是没有的,这句是在第二次进来时起作用的,传递一个请求码过去。
然后看看onActivityResult()方法,首先验证刚刚那个请求码,然后验证返回处理结果RESULT_OK,接下来分析由引导页传来的isClick数据,判断“我知道了”按钮是否被点击,若被点击的话,将firstClick设为false,这样就不会进入onCreate()中的if了,然后下次进入软件就不会出现引导页了。