安卓APP开发基础

目录

  • 安卓工程构建第一个APP运行
  • 安卓的工程目录文件夹介绍
  • 安卓APP启动过程
  • 安卓布局控件
    • 布局的种类
    • 布局和页面的关系
    • 显示一张美女图
    • 显示两个美女
  • 常用布局之相对布局
    • 基础控件之Button,TextView,EditText,ImageView, padding和margin(内外边框)
    • 相对布局综合小演练-智能家居刷卡界面
    • 按键美化
  • 常用布局之线性布局
    • 介绍
    • 线性布局orientation、weight、gravity、divider属性
  • 安卓按键响应的几种方式
    • 在xml中设置按键的onClick绑定的函数
    • 自定义类实现按键监听事件的接口
    • 匿名内部类实现按键响应
    • Activity实现click接口
  • 安卓页面跳转
    • 为安卓添加多个页面
    • 页面跳转方法
    • 页面跳转传参
  • 安卓线程实现页面若干秒后自动跳转
  • Activity(页面)的生命周期

安卓工程构建第一个APP运行

嵌入式学习安卓目的其实是为了掌握简单的安卓APP开发,最重要的目的并不是为了开发APP,而是为了了解APP开发的整个过程,方便为安卓开发工程师提供SDK包,也就是如何在手机APP上实现点灯等控制硬件的一系列操作。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
点击Finish,程序构建完毕。

如何启动这个程序?由于自带的模拟器启动较慢,我们先去下载夜神模拟器(或者mumu模拟器,我是用的这个),运行。

eclipse和夜神建立连接之前,需要配置adb的环境变量(因为我们要在Windows的命令行终端使用这个指令):
找到之前我们安装eclipse的路径,找到adb.exe,如下图所示
在这里插入图片描述
复制这个路径,打开Windows环境变量配置界面(右击我的电脑,属性,高级系统设置,环境变量)

在这里插入图片描述

eclipse和mumu模拟器建立连接命令:

adb connect 127.0.0.1:7555

连接成功:
在这里插入图片描述

运行,工程名字上右键,run as android appclication,发现mumu模拟器出现运行界面。
在这里插入图片描述

在这里插入图片描述

  1. 构建容易,包名不能包含中文
  2. 模拟器一般用夜神和mumu,eclipse和夜神建立连接adb connect 127.0.0.1:62001 (127.0.0.1是网络本地地址,也就是连接自己,夜神模拟器的端口号是62001,mumu模拟器端口号是7555)
  3. 连接失败要重启adb adb kill-server adb start-server
  4. 运行,工程名字上右键,run as android appclication

安卓的工程目录文件夹介绍

在这里插入图片描述

  • src: 存放java代码的,有包,有文件

  • gen: 存放自动生成的文件,关心里面的R.java,保存程序的页面,按键,文本等控件的ID,它是自己生成的
    在这里插入图片描述

  • Android:4.4: 存放安卓开发的一些库(UI、蓝牙等),供开发者调用
    在这里插入图片描述

  • asserts: 存放一些资源,配置文件,图片

  • bin: 编译后会生成的一些文件,包括我们关心的apk

  • libs: 依赖库

  • res:
    *drawable前缀:存放app程序要用到的一些图片(高分辨率、低分辨率等)
    在这里插入图片描述
    *layout: 存放布局文件的文件夹
    一般一个activity(安卓页面)对应一个布局(可以拖拽和编程实现界面布局,复杂界面最好采用编程方式,避免出现界面变形,QT也存在这个问题。)
    在这里插入图片描述
    在这里插入图片描述
    *values: 存放一些参数,或者自定义控件的文件

  • AndroidMainfirst.xml: APP的配置
    *权限:网络访问权限,名片夹访问权限,相机访问权限
    *目标机器SDK版本
    *APP的名字
    *APP的图标
    *配置第一个被加载,启动页面

安卓APP启动过程

Laucher(不断检测屏幕触摸)->Androidmanifirst.xml->lauch标签的activity被加载->oncreat被调用->java关联xml布局页面->显示->等待用户触摸等操作

详细参照博文:https://www.jianshu.com/p/4d199e96ec60

安卓布局控件

布局的种类

详见https://blog.csdn.net/wenzhi20102321/article/details/52677595
在这里插入图片描述

布局和页面的关系

显示一张美女图

将提前准备好的图片,选中复制,粘贴到下图目录下。添加一行代码,将图片成功添加到APP中。

在这里插入图片描述

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg"tools:context=".MainActivity" ></RelativeLayout>

在这里插入图片描述

将别人的安卓工程源码导入到eclipse中的方法:
file->import->选中整个文件夹,如下图所示
这里是引用
打开后相应的代码:
在这里插入图片描述

显示两个美女

引入ID、below(指定ID位置下方)的使用方法。
布局关系:
在这里插入图片描述

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" ><RelativeLayout android:id="@+id/girl1"android:layout_width="match_parent"android:layout_height="400dp"android:background="@drawable/girl1"></RelativeLayout><RelativeLayout android:layout_below="@id/girl1"android:layout_width="match_parent"android:layout_height="400dp"android:background="@drawable/girl2"></RelativeLayout></RelativeLayout>

在这里插入图片描述

常用布局之相对布局

RelativeLayout中子控件常用属性:

  • 1、相对于父控件,例如:android:layout_alignParentTop=“true”
    android:layout_alignParentTop 控件的顶部与父控件的顶部对齐;
    android:layout_alignParentBottom 控件的底部与父控件的底部对齐;
    android:layout_alignParentLeft 控件的左部与父控件的左部对齐;
    android:layout_alignParentRight 控件的右部与父控件的右部对齐;

  • 2、相对给定Id控件,例如:android:layout_above=“@id/**”
    android:layout_above 控件的底部置于给定ID的控件之上;
    android:layout_below 控件的底部置于给定ID的控件之下;
    android:layout_toLeftOf 控件的右边缘与给定ID的控件左边缘对齐;
    android:layout_toRightOf 控件的左边缘与给定ID的控件右边缘对齐;
    android:layout_alignBaseline 控件的baseline与给定ID的baseline对齐;
    android:layout_alignTop 控件的顶部边缘与给定ID的顶部边缘对齐;
    android:layout_alignBottom 控件的底部边缘与给定ID的底部边缘对齐;
    android:layout_alignLeft 控件的左边缘与给定ID的左边缘对齐;
    android:layout_alignRight 控件的右边缘与给定ID的右边缘对齐;

  • 3、居中,例如:android:layout_centerInParent=“true”
    android:layout_centerHorizontal 水平居中;
    android:layout_centerVertical 垂直居中;
    android:layout_centerInParent 父控件的中央;

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" ><RelativeLayout android:id="@+id/girl2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/testpic32"android:layout_centerInParent="true"></RelativeLayout></RelativeLayout>

基础控件之Button,TextView,EditText,ImageView, padding和margin(内外边框)

由于拖拽的方式产生的控件容易跑飞,这里我们采用代码的方式去生成控件。
内外边框参照博文:https://www.cnblogs.com/dongh/p/9584962.html
在这里插入图片描述

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><RelativeLayout android:layout_width="400dp"android:layout_height="150dp"android:layout_centerInParent="true"android:background="#ff0000"        ><ImageView android:id="@+id/image1"android:layout_width="30dp"android:layout_height="30dp"android:background="#ff0000"android:src="@drawable/user"android:layout_marginTop="30dp"/><TextView android:layout_toRightOf="@id/image1"android:layout_alignBottom="@id/image1"android:layout_alignTop="@id/image1"android:layout_marginTop="10dp"android:id="@+id/user"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="用户"android:layout_marginLeft="20dp"android:layout_marginRight="10dp"android:textSize="20dp"android:textColor="#ffffff"/><EditText android:id="@+id/ed1"android:layout_width="320dp"android:layout_height="40dp"android:layout_toRightOf="@id/user"/><TextView android:id="@+id/passwd"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="密码"android:layout_marginLeft="20dp"android:layout_marginRight="10dp"android:layout_marginTop="20dp"android:textSize="20dp"android:layout_below="@id/user"android:textColor="#ffffff"/><EditText android:id="@+id/ed2"android:layout_width="320dp"android:layout_height="40dp"android:layout_toRightOf="@id/user"android:layout_below="@id/ed1"/><Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginRight="20dp"android:text="取消"android:id="@+id/btn2"android:layout_below="@id/ed2"/><Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="30dp"android:text="确定"android:id="@+id/btn1"android:layout_below="@id/ed2"android:layout_toLeftOf="@id/btn2"/></RelativeLayout></RelativeLayout>

在这里插入图片描述
在这里插入图片描述

相对布局综合小演练-智能家居刷卡界面

在这里插入图片描述

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg_shopping_menu"tools:context=".MainActivity" ><RelativeLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#00ff00"><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="智能家居"android:textSize="25dp"android:layout_marginLeft="15dp"android:layout_marginTop="6dp"/><Button android:id="@+id/zhuce"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="注册"android:layout_alignParentRight="true"android:layout_marginRight="20dp"/><Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="查询信息"android:layout_toLeftOf="@id/zhuce"/></RelativeLayout><ImageView android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/pic_rf"android:layout_centerInParent="true"/><ImageView android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/card"android:layout_centerInParent="true"android:paddingLeft="120dp"/><Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/btn_selector"android:text="刷卡"android:layout_marginBottom="30dp"android:layout_centerHorizontal="true"android:layout_alignParentBottom="true"/></RelativeLayout>

运行效果:
在这里插入图片描述

按键美化

方法:在drawable底下新建.xml文件(代码如下面博文中介绍),然后在主xml里面去引用这些美化的xml。
https://blog.csdn.net/tracydragonlxy/article/details/88552262
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

常用布局之线性布局

介绍

之前介绍的相对布局,自由拖拽控件时,摆放的位置是任意的,而线性布局在拖拽时,控件是不能任意放置的。只能在横线(默认)、竖线方向排列控件。

在这里插入图片描述

线性布局orientation、weight、gravity、divider属性

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg_shopping_menu"tools:context=".MainActivity" ><LinearLayoutandroid:layout_width="400dp"android:layout_height="100dp"android:layout_centerInParent="true"android:orientation="horizontal" ><LinearLayoutandroid:layout_width="0dp"android:layout_height="100dp"android:layout_weight="1"android:divider="@drawable/fenge"android:dividerPadding="2dp"android:orientation="vertical"android:showDividers="middle|end" ><TextViewandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:gravity="center"android:text="账号" /><TextViewandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:gravity="center"android:text="密码" /><TextViewandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:gravity="center"android:text="ID号" /></LinearLayout><LinearLayoutandroid:layout_width="0dp"android:layout_height="100dp"android:layout_weight="5"android:divider="@drawable/fenge"android:dividerPadding="2dp"android:orientation="vertical"android:showDividers="middle|end" ><EditTextandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><EditTextandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><EditTextandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /></LinearLayout></LinearLayout></RelativeLayout>

在这里插入图片描述
fenge.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line"><size android:width="200dp"android:height="2dp"/><stroke android:color="#000000"/></shape>

在这里插入图片描述

安卓按键响应的几种方式

在xml中设置按键的onClick绑定的函数

在这里插入图片描述
在这里插入图片描述
activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="buttonBeCliecked"android:text="按键一" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/button1"android:layout_below="@+id/button1"android:layout_marginTop="53dp"android:onClick="buttonBeCliecked"android:text="按键二" /></RelativeLayout>

MainActivity.java

package com.example.sgkbc.button;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void buttonBeCliecked(View v){//System.out.println(v.getId());switch(v.getId()){case R.id.button1:System.out.println("按键一被按下");Toast.makeText(this, "按键一被按下", 0).show();break;case R.id.button2:System.out.println("按键二被按下");Toast.makeText(this, "按键二被按下", 0).show();break;}}}

自定义类实现按键监听事件的接口

参照博文:安卓开发中的监听器(OnClickListener)

步骤一:绑定局部变量button和xml中的button, 使用API函数:findViewById
在这里插入图片描述
步骤二:实现接口类,在类中实现onclicked方法,写业务代码
在这里插入图片描述
步骤三:为1,2两步做的准备进行绑定,使得按键被按下后执行你写的业务代码
在这里插入图片描述

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按键一" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/button1"android:layout_below="@+id/button1"android:layout_marginTop="58dp"android:text="按键二" /></RelativeLayout>

MainActivity.java

package com.example.sgkbc.button;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;//实现接口类,在类中实现onclicked方法,写业务代码
class MyClieckHandler implements View.OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch(v.getId()){case R.id.button1:System.out.println("按键一被按下");//	Toast.makeText(this, "按键一被按下", 0).show();break;case R.id.button2:System.out.println("按键二被按下");//	Toast.makeText(this, "按键二被按下", 0).show();break;}}
}public class MainActivity extends Activity {Button btn1;Button btn2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//绑定 局部变量button和xml中的button,  findViewByIdbtn1 = (Button) findViewById(R.id.button1);btn2 = (Button) findViewById(R.id.button2);//绑定 按键被按下后执行你写的业务代码btn1.setOnClickListener(new MyClieckHandler());btn2.setOnClickListener(new MyClieckHandler());}}

匿名内部类实现按键响应

JAVA知识,匿名内部类由于没有名字,导致每次用它的时候都要建这个类,并实现里面的接口。

在这里插入图片描述

MainActivity.java


package com.example.sgkbc.button;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;public class MainActivity extends Activity {Button btn1;Button btn2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn1 = (Button) findViewById(R.id.button1);btn2 = (Button) findViewById(R.id.button2);btn1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubSystem.out.println("按键一被按下");Toast.makeText(MainActivity.this, "按键一被按下", 0).show();}});btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubSystem.out.println("按键二被按下");Toast.makeText(MainActivity.this, "按键二被按下", 0).show();}});}}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按键一" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/button1"android:layout_below="@+id/button1"android:layout_marginTop="57dp"android:text="按键二" /></RelativeLayout>

Activity实现click接口

在这里插入图片描述

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按键一" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/button1"android:layout_below="@+id/button1"android:layout_marginTop="58dp"android:text="按键二" /></RelativeLayout>

MainActivity.java


package com.example.sgkbc.button;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;//继承			   //重写接口               
public class MainActivity extends Activity implements View.OnClickListener{Button btn1;Button btn2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn1 = (Button) findViewById(R.id.button1);btn2 = (Button) findViewById(R.id.button2);btn1.setOnClickListener(this);btn2.setOnClickListener(this);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch(v.getId()){case R.id.button1:System.out.println("按键一被按下");//	Toast.makeText(this, "按键一被按下", 0).show();break;case R.id.button2:System.out.println("按键二被按下");//	Toast.makeText(this, "按键二被按下", 0).show();break;}}}

安卓页面跳转

为安卓添加多个页面

在src下new一个.Activity文件,就新建了一个页面,继续new则继续添加页面。添加成功后会产生相对的JAVA以及xml文件,另外图中介绍了将相应页面设置成安卓启动界面的方法。

在这里插入图片描述

页面跳转方法

跳转的API使用方法:
在这里插入图片描述

介绍三个界面的跳转方法例子(一跳到二,二跳到三):

MainActivity.java

package com.example.sgkbc.activity;//注意快捷键自动导包的方法import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void goSecond(View v){//intent去设置要跳转的页面Intent intent = new Intent(this, SecondActivity.class);//跳转startActivity(intent);}
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="goSecond"android:text="跳转到第二个页面" /><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/button1"android:layout_below="@+id/button1"android:layout_marginTop="55dp"android:text="这是第一个页面" /></RelativeLayout>

SecondActivity.java

package com.example.sgkbc.activity;import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;public class SecondActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);}public void goThird(View v){//intent去设置要跳转的页面Intent intent = new Intent(this, ThirdActivity.class);//跳转startActivity(intent);}}

activity_second.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".SecondActivity" ><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:layout_marginLeft="16dp"android:layout_marginTop="113dp"android:text="这是第二个页面" /><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/textView1"android:layout_alignParentTop="true"android:layout_marginTop="16dp"android:onClick="goThird"android:text="跳转到第三个页面" /></RelativeLayout>

ThirdActivity.java

package com.example.sgkbc.activity;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;public class ThirdActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_third);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.third, menu);return true;}}

activity_third.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".ThirdActivity" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="这是第三个页面" /></RelativeLayout>

在这里插入图片描述
在这里插入图片描述

页面跳转传参

方法一:使用intent
传递:
在这里插入图片描述
接收:
在这里插入图片描述
MainActivity.java

package com.example.sgkbc.activity;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void goSecond(View v){//intent去设置要跳转的页面                   给第二个界面传递Intent intent = new Intent(this, SecondActivity.class);//方法的重载 可以放小数、整型数、数组等intent.putExtra("MyData", "爱你哦");//键 值//跳转startActivity(intent);}
}

SecondActivity.java

package com.example.sgkbc.activity;import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;public class SecondActivity extends Activity {private String data;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);//接收来自第一个界面Intent i = this.getIntent();//不能new一个 要在这个底下获取到这个Intentdata = i.getStringExtra("MyData");// 键值//System.out.println("收到数据:"+data);Toast.makeText(this, "第二个页面收到数据:"+data, 0).show();}public void goThird(View v){//intent去设置要跳转的页面                  继续给第三个界面传Intent intent = new Intent(this, ThirdActivity.class);intent.putExtra("MyData", data);//跳转startActivity(intent);}}

在这里插入图片描述
方法二:使用bundle
发送:
在这里插入图片描述
接收:
在这里插入图片描述

MainActivity.java

package com.example.sgkbc.activity;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void goSecond(View v){//intent去设置要跳转的页面Intent intent = new Intent(this, SecondActivity.class);Bundle bundle = new Bundle();bundle.putString("MyData", "爱你哦");bundle.putInt("ID", 521);intent.putExtras(bundle);// intent.putExtra("MyData", "爱你哦");//跳转startActivity(intent);}
}

SecondActivity.java

package com.example.sgkbc.activity;import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;public class SecondActivity extends Activity {//private String data;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);Intent i = this.getIntent();//data = i.getStringExtra("MyData");//MyData//System.out.println("收到数据:"+data);Bundle b = i.getExtras();String data = b.getString("MyData");int data2 = b.getInt("ID");Toast.makeText(this, "第二个页面收到数据:"+data+data2, 0).show();}public void goThird(View v){//intent去设置要跳转的页面Intent intent = new Intent(this, ThirdActivity.class);// intent.putExtra("MyData", data);//跳转startActivity(intent);}}

在这里插入图片描述

安卓线程实现页面若干秒后自动跳转

实现页面的若干秒后的自动跳转效果
在这里插入图片描述

package com.example.sgkbc.activity;import java.util.Scanner;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 新线程里面去sleep.要另外启动一个线程,在3秒后启动一个新页面。//不要直接在UI线程中sleep(即直接Thread.sleep(3000)),//因为安卓启动后开启ui线程(不断刷新界面) 直接被sleep会暂停刷新,第一个界面就看不到了,三秒后跳到第二个界面//	如何在安卓(java)中创建线程Thread t = new Thread(new Runnable() {//设置线程要干的活@Overridepublic void run() {// TODO Auto-generated method stubtry {//安卓线程固定使用方法 Thread.sleep(3000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}//intent去设置要跳转的页面Intent intent = new Intent(MainActivity.this, SecondActivity.class);//跳转startActivity(intent);}});t.start();//启动线程}public void goSecond(View v){//intent去设置要跳转的页面Intent intent = new Intent(this, SecondActivity.class);//跳转startActivity(intent);}
}

运行安卓程序,发现三秒后自动跳转到第二个界面。

Activity(页面)的生命周期

参照博文——基础总结篇之一:Activity生命周期

在这里插入图片描述

1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。

2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。

3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。

4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。

5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。

6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。

7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

详细验证过程参照自己的代码或者上面博文的示例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jquery.ui.draggable中文文档jquery 自由拖拽类~study~

为什么80%的码农都做不了架构师&#xff1f;>>> JQuery UI Draggable插件用来使选中的元素可以通过鼠标拖动. Draggable的元素受影响css: ui-draggable, 拖动过程中的css: ui-draggable-dragging. 如果需要的不仅仅是拖, 而是一个完整的拖放功能, 请参阅JQue…

数据结构——二叉树先序、中序、后序及层次四种遍历(C语言版)

摘自&#xff1a;数据结构——二叉树先序、中序、后序及层次四种遍历&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-12-09 17:08:48 网址&#xff1a;https://blog.csdn.net/chinesekobe/article/details/110874773?ops_request_misc%2…

js 获取td高度_JS或jQuery获取宽高度

javascript//网页可见区域宽&#xff1a; document.body.clientWidth //网页可见区域高&#xff1a; document.body.clientHeight //网页可见区域宽&#xff1a; document.body.offsetWidth (包括边线的宽) //网页可见区域高&#xff1a; document.body.offsetHeight (包括…

一些比较少用但比较有用的linux命令备忘

网络相关 ssh 反向代理 ssh -fCNR 10000:localhost:22 userBB.B.B.B B.B.B.B是一个外网机器B的IP ssh -p 10000 userAlocalhost 在机器B&#xff0c;ssh到机器A 防火墙 查看防火墙服务状态 systemctl status firewalld查询端口是否开放 firewall-cmd --query-port8080/tcp…

安卓网络编程(Socket、WebView控件)

目录JavaSocket服务端开发JavaSocket客户端开发安卓Socket客户端开发接收消息显示到控件上(解决安卓线程无法修改控件问题)Android网络接收数据并刷新界面显示安卓webView智能家居你APP页面开发JavaSocket服务端开发 import java.io.IOException; import java.io.InputStream; …

(转)iOS Wow体验 - 第五章 - 利用iOS技术特性打造最佳体验

本文是《iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad》第五章译文精选&#xff0c;其余章节将陆续放出。上一篇&#xff1a;Wow体验 - 第四章 - 为应用的上下文环境而设计 关于本套译文分享的详情及目录结构&#xff0c;请参考iOS Wow体验 - 译文分享说…

fetch 自动加cookie_WEBUI自动化开发(第五章)

Requests是Python的非常常用的HTTP的库&#xff0c;主要用于网络爬虫和接口自动化测试。下面使用Requests最新版本&#xff0c;通过pip install requests安装。pip install requestsCollecting requests Downloading requests-2.25.0-py2.py3-none-any.whl (61 kB) |███…

结构体对齐计算方式

目录法则一&#xff1a;结构体成员的偏移量必须是成员大小的整数倍(数组除外)法则二&#xff1a;结构体大小必须是所有成员大小的整数倍(数组、结构体除外)带数组的结构体大小计算带结构体的结构体大小计算带联合体的结构体大小计算pragma pack(4)向4对齐对齐方式确实很浪费空间…

【计算机算法设计与分析】——5.4最优二分检索树

&#xff08;n为结点个数&#xff09; 为成本差额 转载于:https://www.cnblogs.com/chihaoyuIsnotHere/p/9815498.html

dataframe常用操作_Pandas | Dataframe的merge操作,像数据库一样尽情join

点击上方蓝字&#xff0c;关注并星标&#xff0c;和我一起学技术。今天是pandas数据处理第8篇文章&#xff0c;我们一起来聊聊dataframe的合并。常见的数据合并操作主要有两种&#xff0c;第一种是我们新生成了新的特征&#xff0c;想要把它和旧的特征合并在一起。第二种是我们…

2.空间配置器

SGI 特殊的空间配置器 std::alloc 一般而言&#xff0c;我们习惯的C内存配置操作和释放操作是这样的 class Foo{…..} Foo* pf new Foo; delete pf; new包含两阶段操作 &#xff08;1&#xff09;调用 ::operator new 配置内存 &#xff08;2&#xff09;调用 Foo::Foo() …

Github的简单使用(网页版)

目录Git和GithubGithub基础概念注册Github账号创建仓库及文件新建仓库新建文件文件的编辑和删除编辑或修改文件删除文件文件的上传文件的查找及下载文件的查找文件的下载IssuesFork开源项目贡献流程Git和Github 什么是Git Git是一个免费、开源的版本控制软件 什么是版本控制…

常用到的正则表达式

2019独角兽企业重金招聘Python工程师标准>>> 常用的正则表达式 1、匹配只含有英文字母和阿拉伯数字 ^[a-zA-Z0-9-]$ 2、匹配电子邮件地址 ^[_a-z0-9-](\.[_a-z0-9-])*[a-z0-9-](\.[a-z0-9-])*$ 3、匹配中文字符 [\u4e00-\u9fa5] 4、匹配国内座机电话号码 (\d{3}-|\d…

CSDN绑定GitHub账号

目录1.点击自己头像进入个人中心2.点击账号设置&#xff0c;选择绑定三方账号3.选择GitHub绑定绑定成功&#xff0c;主页获取勋章1.点击自己头像进入个人中心 2.点击账号设置&#xff0c;选择绑定三方账号 3.选择GitHub绑定 绑定成功&#xff0c;主页获取勋章

My97DatePicker在asp.net项目中的使用

1、去官网下载 My97DatePicker 包 http://www.my97.net/ 2、比如实现如下图所示功能 2.1 先把下载来的包添加到解决方案 2.2 然后在页面引用css文件和js文件 <link href"My97DatePicker/skin/WdatePicker.css" rel"stylesheet" type"text/css"…

机械秒表的使用方法_让console.log()不再是你的唯一选项js日志输出6种方法

几乎所有的javascript开发者最常使用的日志打印调试api都是console.log(),其实还有很多的选项供我们选择&#xff0c;笔者下面就为大家一一介绍.一、console.table()console.table()是我非常建议大家去使用的方法&#xff0c;它可以接受JSON或数组并以表格格式打印&#xff0c;…

Git的安装(附安装包)

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

【10.20校内测试】【小模拟】【无向图建树判奇偶环】【树上差分】

Solution 和后面两道题难度差距太大了吧&#xff01;&#xff01; 显然就只是个小模拟&#xff0c;注意判0就行了。 Code #include<bits/stdc.h> using namespace std;char s[100005];int main() {freopen("expression.in", "r", stdin);freopen(&qu…

微信(QQ)截图时,无法保留鼠标右键菜单选项内容

问题描述 按下右键后弹出菜单&#xff0c;再按下QQ截图热键"Ctrl&#xff0b;Alt&#xff0b;A"&#xff08;微信"Ctrl&#xff0b;A"&#xff09;时&#xff0c;却发现菜单不见了。 微信的解决方法 先按下"Alt"键不放&#xff0c;再按住&quo…

使用WebClient请求WCF REST服务

2019独角兽企业重金招聘Python工程师标准>>> 接上篇”WCF实现REST服务“&#xff0c;服务端有了&#xff0c;我们看看客户端怎么访问&#xff0c;由于JS跨域的限制&#xff0c;这里通过WebClient做在后台代理来访问&#xff0c;话不多说&#xff0c;直接上代码。 1…