智能手机操作系统

在这里插入图片描述

对于智能手机大家都不陌生,现在大多数人使用的都是智能手机。而智能手机操作系统,就是智能手机所使用的系统,它和计算机的操作系统类似。目前,智能手机操作系统主要包括Android、iOS、Windows Mobile、Windows Phone、BlackBerry、Symbian、PalmOS和Linux等。 在这里插入图片描述

2017年第一季度各智能手机操作系统占中国的市场份额如图所示。现在市场上最流行的就是Android和iOS。

Android发展史

在这里插入图片描述

2003年安迪鲁宾成立Android公司,2005年谷歌收购Android公司,2008年Android1.1版本发布, 2010年推出Android2.2版本(冻酸奶),2017年Google的I/O大会宣布安卓设备超过20亿部。

Android的主要版本

在这里插入图片描述

到目前为止已经经历了十多个版本变化,从版本1.5开始版本的编号都是根据甜点命名的,下面的就是每个版本所对应的甜点,并且版本是根据26个字母进行排列的。这些版本都是开源的,免费使用的。

Android系统架构层

在这里插入图片描述

Android系统架构从下到上可以分为Linux Kernel和Android Runtime、Application Framework以及Applications四层,其中Libraries与Android Runtime在同一层。 1、Applications(应用层)是用Java语言编写的运行在Android平台上的程序,如Google默认提供的通讯录、SMS、日历、地图及浏览器等程序。作为Android开发人员,通常需要做的就是编写在应用层上运行的应用程序,例如,现在大火的王者荣耀、贪吃蛇大作战等程序。 2、Application Framework(应用程序框架) 无论是Android提供的应用程序还是开发人员自己编写的应用程序,都需要使用Application Framework(应用程序框架)。通过使用Application Framework,不仅可以大幅度简化代码的编写,而且可以提高程序的复用性。 3、Libraries(库)和Android Runtime(Android运行时) 本层主要由两部分组成,一部分是Android提供的一组C/C++库,为平台的不同组件所使用。开发人员通过Application Framework来使用这些库所提供的不同功能。另一部分是Android运行时,包括核心库和Dalvik虚拟机两部分。核心库中提供了Java语言核心库中包含的大部分功能,虚拟机负责运行程序。Dalvik虚拟机专门针对移动设备进行编写,不仅效率更高,而且占用内存更少。 4、Linux Kernel(Linux内核心) Android的核心系统服务依赖于Linux内核,包括安全性、内存管理、进程管理、网络协议栈和驱动模型等。另外,Linux内核同时也是硬件和软件栈之间的抽象层,而Android更多的是需要一些与移动设备相关的驱动程序,如照相机驱动、蓝牙驱动和USB接口驱动等。

Android开发概述

1、Android是Google开发的操作系统 2、Android开发是移动应用开发的表现之一

完整项目最精简流程

在这里插入图片描述

首先是安卓客户端在手机上看到的内容,安卓客户端要调用网络接口,接口再去获取数据库的数据,那么数据库再把数据返回给接口,接口再把数据返回给客户端,最后在客户端进行展现。这是最精简的一个流程,当然也会有丰富的,比如插入数据的缓存、服务器的部署。

Android开发工具

Eclipse曾经是作为一个很热门的开发工具,当Google自己推出Android Studio之后,这个时代就变了把Eclipse废弃掉了。现在在公司中都是使用Android Studio进行开发的,并且Google已经停止了对Eclipse的继续支持,尽管Eclipse还可以继续进行开发但是对于新的ATT、DDI、MMS已经不在继续跟踪和支持了。 1、下载安装JDK 2、Android Studio 在后面的课程会加入如何使用Eclipse和Android Studio的使用,主要是根据She平台的使用。

智能手机操作系统

在这里插入图片描述

对于智能手机大家都不陌生,现在大多数人使用的都是智能手机。而智能手机操作系统,就是智能手机所使用的系统,它和计算机的操作系统类似。目前,智能手机操作系统主要包括Android、iOS、Windows Mobile、Windows Phone、BlackBerry、Symbian、PalmOS和Linux等。 在这里插入图片描述

2017年第一季度各智能手机操作系统占中国的市场份额如图所示。现在市场上最流行的就是Android和iOS。

Android发展史

在这里插入图片描述

2003年安迪鲁宾成立Android公司,2005年谷歌收购Android公司,2008年Android1.1版本发布, 2010年推出Android2.2版本(冻酸奶),2017年Google的I/O大会宣布安卓设备超过20亿部。

Android的主要版本

在这里插入图片描述

到目前为止已经经历了十多个版本变化,从版本1.5开始版本的编号都是根据甜点命名的,下面的就是每个版本所对应的甜点,并且版本是根据26个字母进行排列的。这些版本都是开源的,免费使用的。

Android系统架构层

在这里插入图片描述

Android系统架构从下到上可以分为Linux Kernel和Android Runtime、Application Framework以及Applications四层,其中Libraries与Android Runtime在同一层。 1、Applications(应用层)是用Java语言编写的运行在Android平台上的程序,如Google默认提供的通讯录、SMS、日历、地图及浏览器等程序。作为Android开发人员,通常需要做的就是编写在应用层上运行的应用程序,例如,现在大火的王者荣耀、贪吃蛇大作战等程序。 2、Application Framework(应用程序框架) 无论是Android提供的应用程序还是开发人员自己编写的应用程序,都需要使用Application Framework(应用程序框架)。通过使用Application Framework,不仅可以大幅度简化代码的编写,而且可以提高程序的复用性。 3、Libraries(库)和Android Runtime(Android运行时) 本层主要由两部分组成,一部分是Android提供的一组C/C++库,为平台的不同组件所使用。开发人员通过Application Framework来使用这些库所提供的不同功能。另一部分是Android运行时,包括核心库和Dalvik虚拟机两部分。核心库中提供了Java语言核心库中包含的大部分功能,虚拟机负责运行程序。Dalvik虚拟机专门针对移动设备进行编写,不仅效率更高,而且占用内存更少。 4、Linux Kernel(Linux内核心) Android的核心系统服务依赖于Linux内核,包括安全性、内存管理、进程管理、网络协议栈和驱动模型等。另外,Linux内核同时也是硬件和软件栈之间的抽象层,而Android更多的是需要一些与移动设备相关的驱动程序,如照相机驱动、蓝牙驱动和USB接口驱动等。

Android开发概述

1、Android是Google开发的操作系统 2、Android开发是移动应用开发的表现之一

完整项目最精简流程

在这里插入图片描述

首先是安卓客户端在手机上看到的内容,安卓客户端要调用网络接口,接口再去获取数据库的数据,那么数据库再把数据返回给接口,接口再把数据返回给客户端,最后在客户端进行展现。这是最精简的一个流程,当然也会有丰富的,比如插入数据的缓存、服务器的部署。

Android开发工具

Eclipse曾经是作为一个很热门的开发工具,当Google自己推出Android Studio之后,这个时代就变了把Eclipse废弃掉了。现在在公司中都是使用Android Studio进行开发的,并且Google已经停止了对Eclipse的继续支持,尽管Eclipse还可以继续进行开发但是对于新的ATT、DDI、MMS已经不在继续跟踪和支持了。 1、下载安装JDK 2、Android Studio 在后面的课程会加入如何使用Eclipse和Android Studio的使用,主要是根据She平台的使用。

智能手机操作系统

在这里插入图片描述

对于智能手机大家都不陌生,现在大多数人使用的都是智能手机。而智能手机操作系统,就是智能手机所使用的系统,它和计算机的操作系统类似。目前,智能手机操作系统主要包括Android、iOS、Windows Mobile、Windows Phone、BlackBerry、Symbian、PalmOS和Linux等。 在这里插入图片描述

2017年第一季度各智能手机操作系统占中国的市场份额如图所示。现在市场上最流行的就是Android和iOS。

Android发展史

在这里插入图片描述

2003年安迪鲁宾成立Android公司,2005年谷歌收购Android公司,2008年Android1.1版本发布, 2010年推出Android2.2版本(冻酸奶),2017年Google的I/O大会宣布安卓设备超过20亿部。

Android的主要版本

在这里插入图片描述

到目前为止已经经历了十多个版本变化,从版本1.5开始版本的编号都是根据甜点命名的,下面的就是每个版本所对应的甜点,并且版本是根据26个字母进行排列的。这些版本都是开源的,免费使用的。

Android系统架构层

在这里插入图片描述

Android系统架构从下到上可以分为Linux Kernel和Android Runtime、Application Framework以及Applications四层,其中Libraries与Android Runtime在同一层。 1、Applications(应用层)是用Java语言编写的运行在Android平台上的程序,如Google默认提供的通讯录、SMS、日历、地图及浏览器等程序。作为Android开发人员,通常需要做的就是编写在应用层上运行的应用程序,例如,现在大火的王者荣耀、贪吃蛇大作战等程序。 2、Application Framework(应用程序框架) 无论是Android提供的应用程序还是开发人员自己编写的应用程序,都需要使用Application Framework(应用程序框架)。通过使用Application Framework,不仅可以大幅度简化代码的编写,而且可以提高程序的复用性。 3、Libraries(库)和Android Runtime(Android运行时) 本层主要由两部分组成,一部分是Android提供的一组C/C++库,为平台的不同组件所使用。开发人员通过Application Framework来使用这些库所提供的不同功能。另一部分是Android运行时,包括核心库和Dalvik虚拟机两部分。核心库中提供了Java语言核心库中包含的大部分功能,虚拟机负责运行程序。Dalvik虚拟机专门针对移动设备进行编写,不仅效率更高,而且占用内存更少。 4、Linux Kernel(Linux内核心) Android的核心系统服务依赖于Linux内核,包括安全性、内存管理、进程管理、网络协议栈和驱动模型等。另外,Linux内核同时也是硬件和软件栈之间的抽象层,而Android更多的是需要一些与移动设备相关的驱动程序,如照相机驱动、蓝牙驱动和USB接口驱动等。

Android开发概述

1、Android是Google开发的操作系统 2、Android开发是移动应用开发的表现之一

完整项目最精简流程

在这里插入图片描述

首先是安卓客户端在手机上看到的内容,安卓客户端要调用网络接口,接口再去获取数据库的数据,那么数据库再把数据返回给接口,接口再把数据返回给客户端,最后在客户端进行展现。这是最精简的一个流程,当然也会有丰富的,比如插入数据的缓存、服务器的部署。

Android开发工具

Eclipse曾经是作为一个很热门的开发工具,当Google自己推出Android Studio之后,这个时代就变了把Eclipse废弃掉了。现在在公司中都是使用Android Studio进行开发的,并且Google已经停止了对Eclipse的继续支持,尽管Eclipse还可以继续进行开发但是对于新的ATT、DDI、MMS已经不在继续跟踪和支持了。 1、下载安装JDK 2、Android Studio 在后面的课程会加入如何使用Eclipse和Android Studio的使用,主要是根据She平台的使用。

Eclipse流程

1、点击菜单栏的File->New->Android Application Project,然后按照下图进行参数配置,点击Next进入下一步 在这里插入图片描述

2、出现左图时选择“Empty Activity”,点击“Next”进入右图界面,点击“Finish”结束 在这里插入图片描述 在这里插入图片描述

3、运行“Hello World”项目。选中左侧树形菜单根节点“HW”,点击菜单栏“Run”菜单中的“Run”按钮,在弹出的窗口中选择“Android Application”点击“OK”,运行成功的界面如图所示 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

Android Studio流程

1、点击Flie->New->New Module 在这里插入图片描述

2、选择Phone & Table Module,这是手机和平板的开发 在这里插入图片描述

3、创建Phone & Tablet Module 在这里插入图片描述

4、选择空的项目 在这里插入图片描述

5、这里的名字无须修改,点击Finish,完成创建 在这里插入图片描述

6、运行程序,确定运行的是HelloWord程序,AVD,点击绿色三角运行程序 在这里插入图片描述 在这里插入图片描述

She流程

1、创建一个安卓项目 在这里插入图片描述 在这里插入图片描述

2、先打开AVD(httpd-dev-server->vnc_lite.html->AVD) 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

3、等待启动。 在这里插入图片描述 在这里插入图片描述

4、返回new terminal,点击build 在这里插入图片描述

5、点击run,运行程序 在这里插入图片描述

6、在AVD中点击Android Example程序 在这里插入图片描述 在这里插入图片描述

布局管理器

在这里插入图片描述

一个页面上元素会有很多,会有很多的组件摆放在同一个页面上,这些元素的相互之间摆放的位置是如何确定的?他们之间的联系是谁来管理他们的?那么我们就是通过布局管理器来实现的。我们主要讲解两个布局,一个是线性布局还有一个是相对布局,当然在安卓体系中布局方式也是不止这两种还有包括帧布局、基本不用的绝对布局、网格布局。线性布局和相对布局是使用最为频繁,在百分之九十九的情况下用这两种就可以了,其他布局也一般不会使用,所以我们从最实际的角度出发,只讲这两个布局。

线性布局

最常用属性:android:id(给控件设置id,通过标识找到)、android:layout_width(设置宽度)、android:layout_height(设置高度)、android:background(设置背景,背景可以是颜色、图片、自定义的xml文件)、android:layout_margin(设置外边距)、android:layout_padding(设置内边距)、android:orientation(线性布局以列或行来显示内部子元素),这些属性不仅是LinearLayout常用的包括RelativeLayout、控件都会使用这些属性,除了android:orientation只有在特殊属性中使用。 1、创建一个安卓工程 在这里插入图片描述

2、打开activity_main.xml文件,这里使用的是相对布局。(在android->src->res->layout->activity_main.xml) 在这里插入图片描述

3、修改为线性布局,将RelativeLayout修改为LinearLayout 在这里插入图片描述 在这里插入图片描述

4、删除文件中TextView中的内容重新写 在这里插入图片描述

5、根布局修改为了线性布局,在里面继续写子元素也是线性布局

<LinearLayout
    android:id="@+id/a"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="#000000">  
</LinearLayout>

标识为a,宽度和高度匹配父控件,垂直摆放,背景颜色为黑色 在这里插入图片描述

6、运行程序查看结果先打开AVD(httpd-dev-server->vnc_lite.html->AVD),再build,最后run,在AVD中找到程序Android Example 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

7、修改高度和宽度为20dp,安卓中的单位为dp

 <LinearLayout
     android:id="@+id/a"
     android:layout_width="20dp"
     android:layout_height="20dp"
     android:orientation="vertical"
     android:background="#000000">  

 </LinearLayout>

在这里插入图片描述

8、运行程序、先将之前的程序在AVD上删除,点击uninstall 在这里插入图片描述 在这里插入图片描述

10、运行程序,先build再run 在这里插入图片描述

11、写一个View,View是所有view的父件,无论是TextView、buttonView等 View的宽度和高度都是匹配父控件的,父控件的宽度和高度为20dp,背景颜色为红色,所以运行的效果是红色挡住黑色 <View android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FF0033"/> 在这里插入图片描述

12、运行程序,先删除上一个程序的app,再运行当前程序(uninstall->build->run) 在这里插入图片描述

13、设置一个内边距为10dp,父控件的宽度和高度改为200dp android:padding="10dp" 在这里插入图片描述

14、运行效果(uninstall->build->run) 在这里插入图片描述

15、再写一个线性布局,水平排列,宽度为父控件的宽度,因为上一个子控件占用了200dp所以这个控件只占用剩下的宽度,高度为200dp,背景颜色为蓝色

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:orientation="horizontal"
        android:background="#0066FF">

    </LinearLayout>

在这里插入图片描述

16、运行效果(uninstall->build->run) 在这里插入图片描述

17、在父类控件中加入垂直排列,既然是垂直排列,蓝色的宽度就是整个屏幕了 android:orientation="vertical" 在这里插入图片描述

18、运行效果(uninstall->build->run) 在这里插入图片描述

19、让各个子控件之间距离10dp,有两个种方法,第一种是在蓝色控件中加入marginTop,距离上个控件 android:layout_marginTop="10dp" 在这里插入图片描述

20、运行效果(uninstall->build->run) 在这里插入图片描述

21、第二种方法是在黑色的控件中加入marginBottom,距离下个控件10dp android:layout_marginBottom="10dp" 在这里插入图片描述

22、运行效果(uninstall->build->run) 在这里插入图片描述

相对布局

除了上节课所讲的线性布局所列出来的宽度、高度、id,相对布局同样也具有,除此之外,我们还要学习一些相对布局所特有的属性,android:layout_toLeftOf(在谁的左边)、android:layout_toRigthOf(在谁的右边)、android:layout_alignBottom(跟谁的底部对齐)、android:layout_alignParentBottom(跟父控件底部对齐)、android:layout_below(在谁的下面)相对布局是参照的概念,我参照你,你参照我的。 1、创建一个安卓工程 在这里插入图片描述

2、打开activity_main.xml。(在android->src->res->layout->activity_main.xml) 在这里插入图片描述

3、打开安卓模拟器(httpd-dev-server->vnc_lite.html->AVD) 在这里插入图片描述

4、先添加一个宽度和高度都为100dp,背景为黑色的正方形

<View
    android:id="@+id/a"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:background="#000000" />

在这里插入图片描述

5、运行效果,build->run,黑色正方形默认在左上角 在这里插入图片描述

6、使黑色方块在模拟器的左下角,在父控件的底部,默认左侧 android:layout_alignParentBottom="true" 在这里插入图片描述

7、运行效果,先删除之前运行的程序,再运行新的程序(uninstall->build->run) 在这里插入图片描述

8、使黑色方块在右下方 android:layout_alignParentRight="true" 在这里插入图片描述

9、运行效果(uninstall->build->run) 在这里插入图片描述

10、添加一个红色的方块在黑色的右侧

<View 
        android:id="@+id/b"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="#FF0033"
        android:layout_toRightOf="@id/a"/>

在这里插入图片描述

11、运行效果(uninstall->build->run) 在这里插入图片描述

12、使红色的方块在黑色的下面 android:layout_below="@id/a" 在这里插入图片描述

13、运行效果(uninstall->build->run) 在这里插入图片描述

14、线性布局和相对布局相结合,可以相互嵌套

<LinearLayout
        android:id="@+id/c"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_below="@id/b"
        android:background="#0066FF">
    </LinearLayout>

在这里插入图片描述

15、运行效果(uninstall->build->run) 在这里插入图片描述

布局管理器

在这里插入图片描述

一个页面上元素会有很多,会有很多的组件摆放在同一个页面上,这些元素的相互之间摆放的位置是如何确定的?他们之间的联系是谁来管理他们的?那么我们就是通过布局管理器来实现的。我们主要讲解两个布局,一个是线性布局还有一个是相对布局,当然在安卓体系中布局方式也是不止这两种还有包括帧布局、基本不用的绝对布局、网格布局。线性布局和相对布局是使用最为频繁,在百分之九十九的情况下用这两种就可以了,其他布局也一般不会使用,所以我们从最实际的角度出发,只讲这两个布局。

线性布局

最常用属性:android:id(给控件设置id,通过标识找到)、android:layout_width(设置宽度)、android:layout_height(设置高度)、android:background(设置背景,背景可以是颜色、图片、自定义的xml文件)、android:layout_margin(设置外边距)、android:layout_padding(设置内边距)、android:orientation(线性布局以列或行来显示内部子元素),这些属性不仅是LinearLayout常用的包括RelativeLayout、控件都会使用这些属性,除了android:orientation只有在特殊属性中使用。 1、创建一个安卓工程 在这里插入图片描述

2、打开activity_main.xml文件,这里使用的是相对布局。(在android->src->res->layout->activity_main.xml) 在这里插入图片描述

3、修改为线性布局,将RelativeLayout修改为LinearLayout 在这里插入图片描述 在这里插入图片描述

4、删除文件中TextView中的内容重新写 在这里插入图片描述

5、根布局修改为了线性布局,在里面继续写子元素也是线性布局

<LinearLayout
    android:id="@+id/a"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="#000000">  
</LinearLayout>

标识为a,宽度和高度匹配父控件,垂直摆放,背景颜色为黑色 在这里插入图片描述

6、运行程序查看结果先打开AVD(httpd-dev-server->vnc_lite.html->AVD),再build,最后run,在AVD中找到程序Android Example 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

7、修改高度和宽度为20dp,安卓中的单位为dp

 <LinearLayout
     android:id="@+id/a"
     android:layout_width="20dp"
     android:layout_height="20dp"
     android:orientation="vertical"
     android:background="#000000">  

 </LinearLayout>

在这里插入图片描述

8、运行程序、先将之前的程序在AVD上删除,点击uninstall 在这里插入图片描述 在这里插入图片描述

10、运行程序,先build再run 在这里插入图片描述

11、写一个View,View是所有view的父件,无论是TextView、buttonView等 View的宽度和高度都是匹配父控件的,父控件的宽度和高度为20dp,背景颜色为红色,所以运行的效果是红色挡住黑色 <View android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FF0033"/> 在这里插入图片描述

12、运行程序,先删除上一个程序的app,再运行当前程序(uninstall->build->run) 在这里插入图片描述

13、设置一个内边距为10dp,父控件的宽度和高度改为200dp android:padding="10dp" 在这里插入图片描述

14、运行效果(uninstall->build->run) 在这里插入图片描述

15、再写一个线性布局,水平排列,宽度为父控件的宽度,因为上一个子控件占用了200dp所以这个控件只占用剩下的宽度,高度为200dp,背景颜色为蓝色

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:orientation="horizontal"
        android:background="#0066FF">

    </LinearLayout>

在这里插入图片描述

16、运行效果(uninstall->build->run) 在这里插入图片描述

17、在父类控件中加入垂直排列,既然是垂直排列,蓝色的宽度就是整个屏幕了 android:orientation="vertical" 在这里插入图片描述

18、运行效果(uninstall->build->run) 在这里插入图片描述

19、让各个子控件之间距离10dp,有两个种方法,第一种是在蓝色控件中加入marginTop,距离上个控件 android:layout_marginTop="10dp" 在这里插入图片描述

20、运行效果(uninstall->build->run) 在这里插入图片描述

21、第二种方法是在黑色的控件中加入marginBottom,距离下个控件10dp android:layout_marginBottom="10dp" 在这里插入图片描述

22、运行效果(uninstall->build->run) 在这里插入图片描述

相对布局

除了上节课所讲的线性布局所列出来的宽度、高度、id,相对布局同样也具有,除此之外,我们还要学习一些相对布局所特有的属性,android:layout_toLeftOf(在谁的左边)、android:layout_toRigthOf(在谁的右边)、android:layout_alignBottom(跟谁的底部对齐)、android:layout_alignParentBottom(跟父控件底部对齐)、android:layout_below(在谁的下面)相对布局是参照的概念,我参照你,你参照我的。 1、创建一个安卓工程 在这里插入图片描述

2、打开activity_main.xml。(在android->src->res->layout->activity_main.xml) 在这里插入图片描述

3、打开安卓模拟器(httpd-dev-server->vnc_lite.html->AVD) 在这里插入图片描述

4、先添加一个宽度和高度都为100dp,背景为黑色的正方形

<View
    android:id="@+id/a"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:background="#000000" />

在这里插入图片描述

5、运行效果,build->run,黑色正方形默认在左上角 在这里插入图片描述

6、使黑色方块在模拟器的左下角,在父控件的底部,默认左侧 android:layout_alignParentBottom="true" 在这里插入图片描述

7、运行效果,先删除之前运行的程序,再运行新的程序(uninstall->build->run) 在这里插入图片描述

8、使黑色方块在右下方 android:layout_alignParentRight="true" 在这里插入图片描述

9、运行效果(uninstall->build->run) 在这里插入图片描述

10、添加一个红色的方块在黑色的右侧

<View 
        android:id="@+id/b"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="#FF0033"
        android:layout_toRightOf="@id/a"/>

在这里插入图片描述

11、运行效果(uninstall->build->run) 在这里插入图片描述

12、使红色的方块在黑色的下面 android:layout_below="@id/a" 在这里插入图片描述

13、运行效果(uninstall->build->run) 在这里插入图片描述

14、线性布局和相对布局相结合,可以相互嵌套

<LinearLayout
        android:id="@+id/c"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_below="@id/b"
        android:background="#0066FF">
    </LinearLayout>

在这里插入图片描述

15、运行效果(uninstall->build->run) 在这里插入图片描述

概述

这节课主要讲的是TextView组件,通过几个效果来带大家认识这个组件。第一个是文字大小、颜色这些基本属性的设置;第二个是通常使用一段文本,内容显示不下使用...;第三个是中划线和下划线;最后一个是跑马灯的效果,就是一段文字一直在巡回跑。通过这四个效果,大家常用的属性就都可以掌握了。

演示

1、创建新的android工程 在这里插入图片描述

2、打开AVD http-dev-server->vnc_lite.html->ADV 在这里插入图片描述

3、将布局修改为线性布局管理器,添加TextView组件,设置id为tv1,高和宽为内容自身大小,文字为松鼠学苑,字体颜色为蓝色,字体大小为24sp

<TextView
        android:id="@+id/tv1"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="松鼠学苑"
        android:textColor="#0000FF"
        android:textSize="24sp"/>

在这里插入图片描述

运行:build->run...run android app 在这里插入图片描述

4、添加一个id为TextView的组件,宽度为50dp,高度为自身内容高度,android: maxLines为控制行数,行数为1,android:ellipsize="end"为省略号在结尾

<TextView
        android:id="@+id/tv2"
        android:layout_height="wrap_content"
        android:layout_width="50dp"
        android:text="松鼠学苑"
        android:maxLines="1"
        android:ellipsize="end"
        android:textColor="#0000FF"
        android:textSize="24sp"/>
        

在这里插入图片描述

运行:注意要先删除上一个工程 uninstall...uninstall and ...->build->run... run android app 在这里插入图片描述

5、添加中划线,在activity_main.xml中添加TextView组件,id为3;通过java代码实现锯齿效果,R表错是因为不识别R,编译的时候可以正常运行 activity_main.xml:

<TextView
        android:id="@+id/tv3"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="松鼠学苑"
        android:textColor="#0000FF"
        android:textSize="24sp"/>

HelloAndroidActivity.java:

private TextView mTv3;
mTv3 = (TextView)findViewById(R.id.tv3);
         mTv3.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
         mTv3.getPaint().setAntiAlias(true); //消除锯齿效果

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

6、添加下划线,在activity_main.xml中添加id为4的TextView组件;在HelloAndroidActivity.java中添加效果 activity_main.xml:

<TextView
        android:id="@+id/tv4"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="松鼠学苑"
        android:textColor="#0000FF"
        android:textSize="24sp"/>

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

7、跑马灯效果,

<TextView
        android:id="@+id/tv5"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="松鼠学苑松鼠学苑松鼠学苑松鼠学苑松鼠学苑松鼠学苑松鼠学苑"
        android:textColor="#0000FF"
        android:textSize="24sp"
        android:singleLine="true" //单行显示
        android:ellipsize="marquee" //跑马灯效果
        android:marqueeRepeatLimit="marquee_forever" //循环次数
        android:focusable="true" //获得焦点
        android:focusableInTouchMode="true" />

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

重点总结

TextView及其子类,当字符内容太长显示不下时可以省略号代替未显示的字符;省略号可以在显示区域的起始,中间,结束位置,或者以跑马灯的方式显示文字(textview的状态为被选中)。

其实现只需在xml中对textview的ellipsize属性做相应的设置即可。

     android:ellipsize="start" 省略号在开头

     android:ellipsize="middle" 省略号在中间

     android:ellipsize="end" 省略号在结尾

     android:ellipsize="marquee" 跑马灯显示

概述

Button继承自TextView,它其实是TextView的子类。这节课主要讲Button的基本属性文字大小、颜色;还有一些自定义背景形状。那我们在实际开发中我们设计师设计出的按钮都不是那些直角的,颜色可以就可以的,都会略带一些圆角,这些我们要如何制作一个Button呐?接下来,我们会通过代码带大家一起制作。还有自定义按压效果,在按钮按下去,会有一个按下去的效果,按下去可能颜色会变深了,这个效果可以通过xml文件制作出来,不需要任何的图片。最后一个是给Button设置一个点击事件,既然Button是继承TextView的,所以TextView也有点击事件,基本上所有的控件都包含点击事件。

演示

1、添加Button按钮,使用的是相对布局,按钮的文字为按钮1,id为btn_1,按钮高度为自身内容的高度,按钮的宽度为父类的宽度,文字的大小为20sp,文字颜色为蓝色,按钮的背景颜色为红色,按钮的高度和宽度可以随意设置大小

<Button 
        android:id="@+id/btn_1"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="按钮1"
        android:textSize="20sp"
        android:textColor="#0066FF"
        android:background="#FF0000"/>

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

2、给按钮添加圆角,在activity_main.xml中添加一个Button组件,id为2,背景可以是xml文件,所以创建一个xml文件,在xml文件设置四个角为圆角,圆角的弧度为5dp,填充颜色为橙色 创建新的xml,在drawable-hdpi点击右键选择new file,命名为bg_btn2.xml activity_main.xml:

<Button 
        android:id="@+id/btn_2"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="按钮2"
        android:textSize="20sp"
        android:textColor="#0066FF"
        android:background="@drawable/bg_btn2"
        android:layout_below="@id/btn_1"
        android:layout_marginTop="10dp"/>

bg_btn2.xml:

<?xml version="1.0" encoding="utf-8"?>


<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid
        android:color="#FF9900"
        />

    <corners
        android:radius="5dp"
        />

</shape>

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

3、这个按钮是只有描边,中间是空白的,在activity_main.xml先添加一个Button组件,之后创建bg_btn3.xml文件,在xml文件中设置stroke描边为1dp,描边的颜色为橙色,四个角还是为圆角 activity_main.xml:

<Button 
        android:id="@+id/btn_3"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="按钮3"
        android:textSize="20sp"
        android:textColor="#0066FF"
        android:background="@drawable/bg_btn3"
        android:layout_below="@id/btn_2"
        android:layout_marginTop="10dp"/>

bg_btn3.xml:

<?xml version="1.0" encoding="utf-8"?>


<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <stroke
        android:width="1dp"
        android:color="#FF9900">

    </stroke>
    
    <corners
        android:radius="5dp"
        />

</shape>

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

4、添加按压效果,在activity_main.xml中添加Button组件,创建bg_btn4.xml,并在bg_btn4.xml中设置按压效果,android:state_pressed="true"是按压时,按压时颜色为橙色,圆角,android:state_pressed="false"是不按压的效果,不按压时颜色为红色,圆角 activity_main.xml:

<Button 
        android:id="@+id/btn_4"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="按钮4"
        android:textSize="20sp"
        android:textColor="#0066FF"
        android:background="@drawable/bg_btn4"
        android:layout_below="@id/btn_3"
        android:layout_marginTop="10dp"/>

bg_btn4.xml:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true">
        <shape>
            <solid android:color="#FF9900"/>
            <corners android:radius="5dp"/> 
        </shape>

    </item>

    <item android:state_pressed="false">
        <shape>
            <solid android:color="#FF0000"/>
            <corners android:radius="5dp"/> 
        </shape>

    </item>

</selector>
 

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

5、添加一个点击事件,先在activity_main.xml中添加一个Button组件,点击效果是bg_btn4,添加点击事件,事件方法为showToast,Toast是在界面上弹出的提示信息,过一两秒之后又会消失;在HelloAndroidActivity.java中的HelloAndroidActivity下添加showToast方法,弹出的信息是松鼠学苑,Toast.LENGTH_SHORT为1秒 activity_main.xml:

<Button 
        android:id="@+id/btn_5"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="按钮5"
        android:textSize="20sp"
        android:textColor="#0066FF"
        android:background="@drawable/bg_btn4"
        android:onClick="showToast"
        android:layout_below="@id/btn_4"
        android:layout_marginTop="10dp"/>

HelloAndroidActivity.java:

public void showToast(View view){
        Toast.makeText(this, "松鼠学苑", Toast.LENGTH_SHORT).show();

    }
 

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

6、还有另一种方式完成点击事件,这个方法是比较常用的,在Button4中进行演示,组件Button不用修改,直接通过java代码实现。 HelloAndroidActivity.java:

private Button mBtn3; //声明控件
mBtn3 = (Button)findViewById(R.id.btn_4); //找到控件
        mBtn3.setOnClickListener(new View.OnClickListener(){
        
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(HelloAndroidActivity.this, "松鼠学苑", Toast.LENGTH_SHORT).show(); //this不在是HelloAndroidActivity了,要改成HelloAndroidActivity.this
            }
        });

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

概述

这节课来讲RadioButton,那RadioButton长什么样子呐?通常来讲在一个App中选择性别男和女,这个就是一个Radiobutton来实现的。因为这是在一组中选一个,一组中单选就是用RadioButton,当然要结合RadioGroup结合使用。首先讲一些常用的属性。还有自定义的样式,我们毕竟要根据实际的设计稿来自定义RadioButton样式。最后监听事件,如何监听RadioButton选中事件,我们才能获得当前选中的值。

演示

1、添加一个RadioButton组件,id为1,文字内容为男,橙色,左边的圆圈可以选中

<RadioButton 
        android:id="@+id/rb_1"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="男"
        android:textSize="20sp"
        android:textColor="#FF6600"/>

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

2、做一个男女单选,使用RadioGroup组件,因为RadioGroup可以水平和垂直,这里设置成垂直,因为这两个在一个组中,只能单选

<RadioGroup
        android:id="@+id/rg_1"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:orientation="vertical">

        <RadioButton 
        android:id="@+id/rb_1"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="男"
        android:textSize="20sp"
        android:textColor="#FF6600"/>

        <RadioButton 
        android:id="@+id/rb_2"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="女"
        android:textSize="20sp"
        android:textColor="#FF6600"/>

    </RadioGroup>

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

3、添加一个开始自动选中效果,自动选中男

android:checked="true"

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

4、自定义效果,新建radiobutton.xml文件作为背景效果,选中是深色橙色背景,未选中是橙色描边,android:button="@null"为去掉默认的圆圈,android:gravity="center"文字居中,android:state_checked是否选中 activity_main.xml:

<RadioGroup
        android:id="@+id/rg_2"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:orientation="vertical"
        android:layout_below="@id/rg_1">

        <RadioButton 
        android:id="@+id/rb_3"
        android:layout_height="30dp"
        android:layout_width="60dp"
        android:text="男"
        android:button="@null"
        android:checked="true"
        android:gravity="center"
        android:background="@drawable/radiobutton"
        android:textSize="20sp"
        android:textColor="#000"/>

        <RadioButton 
        android:id="@+id/rb_4"
        android:layout_height="30dp"
        android:layout_width="60dp"
        android:text="女"
        android:button="@null"
        android:gravity="center"
android:layout_marginTop="5dp"
        android:background="@drawable/radiobutton"
        android:textSize="20sp"
        android:textColor="#000"/>
</RadioGroup>

radiobutton.xml:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_checked="true">
        <shape>
            <solid android:color="#AA6600"/>
            <corners android:radius="5dp"/> 
        </shape>

    </item>

    <item android:state_checked="false">
        <shape>
            <stroke android:color="#FF9900"
                    android:width="1dp"/>
            <corners android:radius="5dp"/> 
        </shape>

    </item>

</selector>
 
 

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

5、添加监听事件,在第一组radiogroup中添加 HelloAndroidActivity.java:

private RadioGroup mrg1;
mrg1 = (RadioGroup)findViewById(R.id.rg_1);
        mrg1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){
        
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                // TODO Auto-generated method stub
                RadioButton radiobutton = (RadioButton)group.findViewById(checkedId);
                Toast.makeText(HelloAndroidActivity.this,radiobutton.getText(), Toast.LENGTH_SHORT).show();
            }
        });

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

概述

这节课开始学习图片控件,再次之前已经讲过Button的控件和TextView,Button还有其他衍生类控件,比如说:ToggleButton、Switch(开关)。这两个就不再这里详细的讲解了,利用之前的学习基础,学习这两个控件是比较简单的,还有就是在实际开发中这两个控件的使用频率比较少,所以大家有兴趣的可以自己研究下。我们会讲下ImageView的常用属性。

演示

1、添加一个ImageView控件,背景颜色为橙色,background可以是颜色和图片,这里使用src添加图片,src可以看作内容,将需要的图片上传到drawable

<ImageView
		android:id="@+id/iv_1"
        android:layout_height="200dp"
        android:layout_width="300dp"
        android:background="#FF9900"
        android:src="@drawable/src" />

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

2、让图片铺满,使用scaleType,X轴和Y轴都撑满,但是设置fitXY有可能出现图片拉伸

android:scaleType="fitXY"

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

3、按照图片的比例放置

<ImageView
        android:id="@+id/iv_2"
        android:layout_height="100dp"
        android:layout_width="200dp"
        android:background="#FF9900"
        android:src="@drawable/src"
        android:scaleType="fitCenter"
        android:layout_below="@id/iv_1"
        android:layout_marginTop="10dp" />

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

4、按图片的比例覆盖控件,多余的图片被裁剪到

<ImageView
        android:id="@+id/iv_3"
        android:layout_height="100dp"
        android:layout_width="200dp"
        android:background="#FF9900"
        android:src="@drawable/src"
        android:scaleType="centerCrop"
        android:layout_below="@id/iv_2"
        android:layout_marginTop="10dp" />

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

重点

scaleType属性: fitXY:撑满控件,宽高比可能发生改变 fitCenter:保持宽高比缩放,直至能够完全显示 centerCrop:保持宽高比缩放,直至完全覆盖控件,裁剪显示

概述

在这里插入图片描述

学习第三章还是UI组件,是UI组件中的弹出组件,把它拎出来单独给大家讲解。首先,来学习Toast,在之前的学习中也用到了Toast,在屏幕的下方出现一个提示信息,在一秒钟或者两秒钟消失。现在就详细的讲解一下Toast的使用方法,Toast是一个消息提示组件;设置显示的位置,之前使用的是默认的位置,当然我们可以自定义设置在屏幕中的哪个位置显示;自定义显示内容,之前是显示了一个文本,这也是我们最为常用的,那假设我们显示一个图片加文本要如何做到,也是我们今天要讲的内容;最后是Toast的一个简单封装,这里的封装只是一个入门级的,希望在以后可以找到更适合自己的封装方法。

演示

1、先将基本框架写好,activity_main.xml使用的是线性布局管理器,先列出三个button组件,分别做默认、改变位置、带图片(自定义)的演示;HelloAndroidActivity.java中先声明,在findViewById找到相对应的Button,使用Switch循环语句,在做演示的时候就可以直接在switch中添加 activity_main.xml:

android:orientation="vertical"
<Button 
        android:id="@+id/btn_toast_1"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="默认"/>

    <Button 
        android:id="@+id/btn_toast_2"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="改变位置"/>
    
    <Button 
        android:id="@+id/btn_toast_3"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="带图片(自定义)"/>

HelloAndroidActivity.java:

private Button mbtnToast1;
    private Button mbtnToast2;
private Button mbtnToast3;
mbtnToast1 =(Button) findViewById(R.id.btn_toast_1);
        mbtnToast2 =(Button) findViewById(R.id.btn_toast_2);
        mbtnToast3 =(Button) findViewById(R.id.btn_toast_3);

        OnClick OnClick = new OnClick();
        mbtnToast1.setOnClickListener(OnClick);
        mbtnToast2.setOnClickListener(OnClick);
        mbtnToast3.setOnClickListener(OnClick);

class OnClick implements View.OnClickListener{
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch(v.getId())
            {
                case R.id.btn_toast_1:
                
                break;
                case R.id.btn_toast_2:

                break;
                case R.id.btn_toast_3:
                break;
            }
            
        }
    }

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

2、默认Toast

Toast.makeText(getApplicationContext(), "默认", Toast.LENGTH_LONG).show();

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

3、Toast显示的位置居中,makeText的返回值是Toast,定义一个toastCenter,给toastCenter设置setGravity,最后调用show方法 HelloAndroidActivity.java:

Toast toastCenter = Toast.makeText(getApplicationContext(), "Toast居中", Toast.LENGTH_LONG);
toastCenter.setGravity(Gravity.CENTER, 0 ,0);
toastCenter.show();
 

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

4、自定义效果带图片, 先将准备好的图片上传到drawable-xxhdpi,创建一个activity_toast.xml自定义效果,分为两部分,图片和文字;在HelloAndroidActivity.java中先定义一个Toast,创建视图,视图通过LayoutInflater,view中有ImageView和TextView,分别找到并设置图片和文字 activity_toast.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    android:background="#99000000" //黑色带透明度的,后六位是颜色,前两位是透明度
    android:gravity="center" //居中显示>

    <ImageView
        android:id="@+id/iv_toast"
        android:layout_height="100dp"
        android:layout_width="100dp"
        android:scaleType="fitCenter"/>

    <TextView 
        android:id="@+id/tv_toast"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textColor="#FFFFFF"
        android:layout_marginTop="10dp"/>

</LinearLayout>

HelloAndroidActivity.java:

    Toast toastCustom = new Toast(getApplicationContext());
    LayoutInflater inflater = LayoutInflater.from(HelloAndroidActivity.this);
    View view = inflater.inflate(R.layout.activity_toast,null);
    ImageView imageView = (ImageView)view.findViewById(R.id.iv_toast);
    TextView textView = (TextView)view.findViewById(R.id.tv_toast);
    imageView.setImageResource(R.drawable.src);
    textView.setText("自定义Toast");
    toastCustom.setView(view);
    toastCustom.show();

在这里插入图片描述

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

5、如果连续按同一个按钮,Toast显示是连续的排队状态,等第一个显示完了,第二个才开始显示,在实际开发中是需要后一个将前面的抵消掉,不管点多少下,都以最后一下为准,而不是一直在等,那如何来做呐? 首先封装一个简单的类,创建一个until包,在包下创建ToastUntil.java,在添加一个Button组件,运行之后,连续点十几次按钮不会等20几秒的 ToastUntil.java:

package com.kinginsai.template.android.until;

import android.content.Context;
import android.widget.Toast;

public class ToastUntil{
    public static Toast mToast;
    public static void showMsg(Context context,String msg){
        if(mToast == null){
            mToast = Toast.makeText(context,msg,Toast.LENGTH_LONG);
        }else{
            mToast.setText(msg);
        }
        mToast.show();
    }
}

activity_main.xml:

<Button 
        android:id="@+id/btn_toast_4"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="ToastUntil"/>

HelloAndroidActivity.java:

private Button mbtnToast4;
mbtnToast4 =(Button) findViewById(R.id.btn_toast_4);
mbtnToast4.setOnClickListener(OnClick);
case R.id.btn_toast_4:
                ToastUntil.showMsg(getApplicationContext(), "包装过的Toast");
                break;

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

在这里插入图片描述

概述

在这里插入图片描述

学习第三章还是UI组件,是UI组件中的弹出组件,把它拎出来单独给大家讲解。首先,来学习Toast,在之前的学习中也用到了Toast,在屏幕的下方出现一个提示信息,在一秒钟或者两秒钟消失。现在就详细的讲解一下Toast的使用方法,Toast是一个消息提示组件;设置显示的位置,之前使用的是默认的位置,当然我们可以自定义设置在屏幕中的哪个位置显示;自定义显示内容,之前是显示了一个文本,这也是我们最为常用的,那假设我们显示一个图片加文本要如何做到,也是我们今天要讲的内容;最后是Toast的一个简单封装,这里的封装只是一个入门级的,希望在以后可以找到更适合自己的封装方法。

演示

1、先将基本框架写好,activity_main.xml使用的是线性布局管理器,先列出三个button组件,分别做默认、改变位置、带图片(自定义)的演示;HelloAndroidActivity.java中先声明,在findViewById找到相对应的Button,使用Switch循环语句,在做演示的时候就可以直接在switch中添加 activity_main.xml:

android:orientation="vertical"
<Button 
        android:id="@+id/btn_toast_1"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="默认"/>

    <Button 
        android:id="@+id/btn_toast_2"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="改变位置"/>
    
    <Button 
        android:id="@+id/btn_toast_3"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="带图片(自定义)"/>

HelloAndroidActivity.java:

private Button mbtnToast1;
    private Button mbtnToast2;
private Button mbtnToast3;
mbtnToast1 =(Button) findViewById(R.id.btn_toast_1);
        mbtnToast2 =(Button) findViewById(R.id.btn_toast_2);
        mbtnToast3 =(Button) findViewById(R.id.btn_toast_3);

        OnClick OnClick = new OnClick();
        mbtnToast1.setOnClickListener(OnClick);
        mbtnToast2.setOnClickListener(OnClick);
        mbtnToast3.setOnClickListener(OnClick);

class OnClick implements View.OnClickListener{
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch(v.getId())
            {
                case R.id.btn_toast_1:
                
                break;
                case R.id.btn_toast_2:

                break;
                case R.id.btn_toast_3:
                break;
            }
            
        }
    }

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

2、默认Toast

Toast.makeText(getApplicationContext(), "默认", Toast.LENGTH_LONG).show();

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

3、Toast显示的位置居中,makeText的返回值是Toast,定义一个toastCenter,给toastCenter设置setGravity,最后调用show方法 HelloAndroidActivity.java:

Toast toastCenter = Toast.makeText(getApplicationContext(), "Toast居中", Toast.LENGTH_LONG);
toastCenter.setGravity(Gravity.CENTER, 0 ,0);
toastCenter.show();
 

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

4、自定义效果带图片, 先将准备好的图片上传到drawable-xxhdpi,创建一个activity_toast.xml自定义效果,分为两部分,图片和文字;在HelloAndroidActivity.java中先定义一个Toast,创建视图,视图通过LayoutInflater,view中有ImageView和TextView,分别找到并设置图片和文字 activity_toast.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    android:background="#99000000" //黑色带透明度的,后六位是颜色,前两位是透明度
    android:gravity="center" //居中显示>

    <ImageView
        android:id="@+id/iv_toast"
        android:layout_height="100dp"
        android:layout_width="100dp"
        android:scaleType="fitCenter"/>

    <TextView 
        android:id="@+id/tv_toast"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textColor="#FFFFFF"
        android:layout_marginTop="10dp"/>

</LinearLayout>

HelloAndroidActivity.java:

    Toast toastCustom = new Toast(getApplicationContext());
    LayoutInflater inflater = LayoutInflater.from(HelloAndroidActivity.this);
    View view = inflater.inflate(R.layout.activity_toast,null);
    ImageView imageView = (ImageView)view.findViewById(R.id.iv_toast);
    TextView textView = (TextView)view.findViewById(R.id.tv_toast);
    imageView.setImageResource(R.drawable.src);
    textView.setText("自定义Toast");
    toastCustom.setView(view);
    toastCustom.show();

在这里插入图片描述

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

5、如果连续按同一个按钮,Toast显示是连续的排队状态,等第一个显示完了,第二个才开始显示,在实际开发中是需要后一个将前面的抵消掉,不管点多少下,都以最后一下为准,而不是一直在等,那如何来做呐? 首先封装一个简单的类,创建一个until包,在包下创建ToastUntil.java,在添加一个Button组件,运行之后,连续点十几次按钮不会等20几秒的 ToastUntil.java:

package com.kinginsai.template.android.until;

import android.content.Context;
import android.widget.Toast;

public class ToastUntil{
    public static Toast mToast;
    public static void showMsg(Context context,String msg){
        if(mToast == null){
            mToast = Toast.makeText(context,msg,Toast.LENGTH_LONG);
        }else{
            mToast.setText(msg);
        }
        mToast.show();
    }
}

activity_main.xml:

<Button 
        android:id="@+id/btn_toast_4"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="ToastUntil"/>

HelloAndroidActivity.java:

private Button mbtnToast4;
mbtnToast4 =(Button) findViewById(R.id.btn_toast_4);
mbtnToast4.setOnClickListener(OnClick);
case R.id.btn_toast_4:
                ToastUntil.showMsg(getApplicationContext(), "包装过的Toast");
                break;

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

在这里插入图片描述

概述

在这里插入图片描述

如上图所示,这个就是三种ProgressBar就是进度加载的过程,没有明确目的的就一直在转,有明确目标的是进度条。 在这里插入图片描述

如上图所示,这个是ProgressDialog,一个对话框显示正在加载一个圈在转,提示正在加载,这是一种ProgressDialog。 在这里插入图片描述

如上图所示,另一种是显示下载进度的,这里面其实进度条,这可是使用在许多场景下,下面还可以设置一些Button。

演示

1、一个默认的ProgressBar

android:orientation="vertical"
<ProgressBar 
        android:id="@+id/pd1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />

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

2、ProgressBar的style有很多种

<ProgressBar 
        android:id="@+id/pd2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@android:style/Widget.ProgressBar"
        />

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

3、转圈是无状态的,不知道加载到什么时候,一直在转;进度条是有明确状态的,总长度是父类控件,style是水平状态,最大值是100,一级进度是10,二级进度30

<ProgressBar 
        android:id="@+id/pd3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:max="100"
        android:progress="10"
        android:secondaryProgress="30"
        />

在这里插入图片描述

在这里插入图片描述

4、之前的样式都是老样式4.0之前的样式,其他属性都是一样的,只是换了一下style,这个style也可以自己定义

<ProgressBar 
        android:id="@+id/pd4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@android:style/Widget.Material.ProgressBar.Horizontal"
        android:max="100"
        android:progress="10"
        android:secondaryProgress="30"
        />

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

5、模拟进度条加载,使用pd3,比较明显,加载到30 activity_main.xml:

<ProgressBar 
        android:id="@+id/pd3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@android:style/Widget.ProgressBar.Horizontal"//android是系统自带的效果
        android:max="100"
        android:progress="10"
        android:secondaryProgress="30"
        />

HelloAndroidActivity.java:

private ProgressBar mpd3;
mpd3 = (ProgressBar)findViewById(R.id.pd3);
mpd3.setProgress(30);//加载到30

在这里插入图片描述

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

6、添加一个按钮,点击这个按钮进度条开始加载到100,在pd3上做修改,将二级进度删除 activity_main.xml:

<ProgressBar 
        android:id="@+id/pd4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@android:style/Widget.Material.ProgressBar.Horizontal"
        android:max="100"
        android:progress="10"
        />

    <Button
        android:id="@+id/btn_start"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="模拟进度"/>

HelloAndroidActivity.java:

package com.kinginsai.template.android;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;


public class HelloAndroidActivity extends Activity {
    private ProgressBar mpd3;
    private Button mbtnstart;

    /**
     * Called when the activity is first created.
     *
     * @param savedInstanceState
     *         If the activity is being re-initialized after
     *         previously being shut down then this Bundle contains the data it most
     *         recently supplied in onSaveInstanceState(Bundle). <b>Note: Otherwise it is null.</b>
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         mpd3 = (ProgressBar)findViewById(R.id.pd3);
        mbtnstart = (Button)findViewById(R.id.btn_start);
        mbtnstart.setOnClickListener(new View.OnClickListener() {//设置点击事件 
            @Override
            public void onClick(View v) {
                handler.sendEmptyMessage(0);//发送一个空消息到Handler

            }
        });
    }

    private Handler handler = new Handler(){
        @Override

    public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (mpd3.getProgress() < 100) {//ProgressBar当前进度如果小于100
                handler.postDelayed(runnable, 500);//小于100的时候发送一个消息,延迟500毫秒发送消息,发送之后就执行runnable
            } else {
                Toast.makeText(HelloAndroidActivity.this,"加载完成", Toast.LENGTH_LONG).show();//其他就弹出Toast,显示加载完成
            }
        }
    };


    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            mpd3.setProgress(mpd3.getProgress()+5);//Progress加5
            handler.sendEmptyMessage(0);//送空消息回去到Handler
        }
    };

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(com.kinginsai.template.android.R.menu.main, menu);
        return true;
    }

}

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

7、自定义转圈效果,先将图片上传到drawable-xxhdpi,使图片转起来,实现这个的方法有很多种,我们只将下如何使用ProgressBar使图片转起来,先在drawable创建一个bg_progressbar.xml存放效果,通过indeterminateDrawable属性完成 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

activity_main.xml:

<ProgressBar 
        android:id="@+id/pd5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@android:style/Widget.ProgressBar"
        android:indeterminateDrawable="@drawable/bg_progressbar"
        />

bg_progressbar.xml:

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/progressbar"
    android:pivotX="50%"//在x轴的50%为中心点转
android:pivotY="50%"//在y轴的50%为中心点转
>

</animated-rotate>
 
 

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

8、也可以不通过indeterminateDrawable属性,通过style完成,不止ProgressBar组件可以通过style修改自定义效果,其他组件在自定义效果的时候也可以,打开style.xml

activity_main.xml:

<ProgressBar 
        android:id="@+id/pd5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/MyProgressBar"
        
        />

style.xml:

<style name="MyProgressBar">
        <item name="android:indeterminateDrawable">@drawable/bg_progressbar</item>

    </style>
 

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

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

9、演示progressdialog,添加一个按钮组件,点击按钮之后触发progressdialog,添加一个人为中断progressdialog事件,显示cancel activity_main.xml:

<Button 
        android:id="@+id/btn_progress_dialog1"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="ProgressDialog1"
        android:textAllCaps="false"/>

HelloAndroidActivity.java:

private Button mbtnpd1;
mbtnpd1 = (Button)findViewById(R.id.btn_progress_dialog1);
        mbtnpd1.setOnClickListener(new View.OnClickListener(){
        
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                ProgressDialog progressdialog = new ProgressDialog(HelloAndroidActivity.this);
                progressdialog.setTitle("提示");
                progressdialog.setMessage("正在加载");
                progressdialog.setOnCancelListener(new DialogInterface.OnCancelListener(){//人为返回事件监听
                
                    @Override
                    public void onCancel(DialogInterface dialog) {
                        // TODO Auto-generated method stub
                        Toast.makeText(HelloAndroidActivity.this, "cancel...", Toast.LENGTH_LONG).show();
                    }
                });
                
                progressdialog.show();
                
            }
        });

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

10、之前是点击其他区域是可以隐藏或者取消progressdialog,添加setCancelable属性就禁止返回,必须等待加载完成之后才可以继续操作

progressdialog.setCancelable(false);

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

11、演示进度条类型的progressdialog,添加一个button按钮,使用setProgressStyle属性更改为进度条形式,默认max为100,可以自定义设置 activity_main.xml:

<Button 
        android:id="@+id/btn_progress_dialog2"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="ProgressDialog2"
        android:textAllCaps="false"/>

HelloAndroidActivity.java:

private Button mbtnpd2;
        mbtnpd2.setOnClickListener(new View.OnClickListener(){
        
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                ProgressDialog progressdialog = new ProgressDialog(HelloAndroidActivity.this);
                progressdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                progressdialog.setTitle("提示");
                progressdialog.setMessage("正在下载...");
                progressdialog.show();
                
            }
        });
 
 

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

不可不会的Activity和Fragment

Activity之前已经接触过了,可以简单的理解为当我们在APP上看到的每一个界面,这每一个界面都需要一个Activity,而Activity并不是界面,只能说一个界面需要一个Activity。Fragment是碎片化的界面,一个Activity可以包含有多个Fragment,Fragment是不能独立存在的,必须依赖Activity受Activity管理的。

Activity的创建三部曲

在这里插入图片描述

  • 1、新建类继承Activity或其子类
  • 2、新创建的Activity在AndroidManifest中声明,不声明是无法使用的,也无法跳转到新建的Activity
  • 3、创建layout并在Activity的onCreate中设置 并非所有的创建一定要按照以上三个步骤操作,如果只有第一步也行,第一步Activity就已经存在了,但是这个Activity存在的意义就没有,既不能跳转过去,也不能跳过新建Activity。所以第二步也要存在,第三步可以跳过,不给新建的Activity设置布局,通常情况下是需要设置布局的,也有不设置布局的,可以把新建的Activity作为父类等等。

演示

1、新建Activity,在src/main/java/com/kinginsai/template/android目录下新建TextActivity 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

2、在AndroidManifest.xml中声明

<activity android:name="com.kinginsai.template.android.TextActivity"/>

在这里插入图片描述

3、新建layout布局,在res/layout目录下,命名为activity_text.xml,添加一个TextView组件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="松鼠学苑" />

</RelativeLayout>

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

4、在Activity中设置布局

package com.kinginsai.template.android;

import android.app.Activity;
import android.os.Bundle;

public class TextActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_text);
    }
}

在这里插入图片描述

5、在activity_main.xml中添加一个button组件,点击按钮之后跳转

<Button
        android:id="@+id/btn"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="button" />
 

在这里插入图片描述

6、在主Activity中添加跳转

private Button mbtn;
mbtn = (Button)findViewById(R.id.btn);
        mbtn.setOnClickListener(new View.OnClickListener(){
        
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //跳转到TextView演示界面
                Intent intent = new Intent(HelloAndroidActivity.this,TextActivity.class);
                startActivity(intent);

            }
        });

在这里插入图片描述

7、运行程序 在这里插入图片描述 在这里插入图片描述

8、程序的上方Android Example是导航栏,要修改在AndroidManifest中添加label属性 在这里插入图片描述 在这里插入图片描述

不可不会的Activity和Fragment

Activity之前已经接触过了,可以简单的理解为当我们在APP上看到的每一个界面,这每一个界面都需要一个Activity,而Activity并不是界面,只能说一个界面需要一个Activity。Fragment是碎片化的界面,一个Activity可以包含有多个Fragment,Fragment是不能独立存在的,必须依赖Activity受Activity管理的。

Activity的创建三部曲

在这里插入图片描述

  • 1、新建类继承Activity或其子类
  • 2、新创建的Activity在AndroidManifest中声明,不声明是无法使用的,也无法跳转到新建的Activity
  • 3、创建layout并在Activity的onCreate中设置 并非所有的创建一定要按照以上三个步骤操作,如果只有第一步也行,第一步Activity就已经存在了,但是这个Activity存在的意义就没有,既不能跳转过去,也不能跳过新建Activity。所以第二步也要存在,第三步可以跳过,不给新建的Activity设置布局,通常情况下是需要设置布局的,也有不设置布局的,可以把新建的Activity作为父类等等。

演示

1、新建Activity,在src/main/java/com/kinginsai/template/android目录下新建TextActivity 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

2、在AndroidManifest.xml中声明

<activity android:name="com.kinginsai.template.android.TextActivity"/>

在这里插入图片描述

3、新建layout布局,在res/layout目录下,命名为activity_text.xml,添加一个TextView组件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="松鼠学苑" />

</RelativeLayout>

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

4、在Activity中设置布局

package com.kinginsai.template.android;

import android.app.Activity;
import android.os.Bundle;

public class TextActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_text);
    }
}

在这里插入图片描述

5、在activity_main.xml中添加一个button组件,点击按钮之后跳转

<Button
        android:id="@+id/btn"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="button" />
 

在这里插入图片描述

6、在主Activity中添加跳转

private Button mbtn;
mbtn = (Button)findViewById(R.id.btn);
        mbtn.setOnClickListener(new View.OnClickListener(){
        
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //跳转到TextView演示界面
                Intent intent = new Intent(HelloAndroidActivity.this,TextActivity.class);
                startActivity(intent);

            }
        });

在这里插入图片描述

7、运行程序 在这里插入图片描述 在这里插入图片描述

8、程序的上方Android Example是导航栏,要修改在AndroidManifest中添加label属性 在这里插入图片描述 在这里插入图片描述

概述

在这里插入图片描述

1.生命周期中各个方法的含义和作用

  • (1)onCreate:create表示创建,这是Activity生命周期的第一个方法,也是我们在android开发中接触的最多的生命周期方法。它本身的作用是进行Activity的一些初始化工作,比如使用setContentView加载布局,对一些控件和变量进行初始化等。但也有很多人将很多与初始化无关的代码放在这,其实这是不规范的。此时Activity还在后台,不可见。所以动画不应该在这里初始化,因为看不到……
  • (2)onStart:start表示启动,这是Activity生命周期的第二个方法。此时Activity已经可见了,但是还没出现在前台,我们还看不到,无法与Activity交互。其实将Activity的初始化工作放在这也没有什么问题,放在onCreate中是由于官方推荐的以及我们开发的习惯。
  • (3)onResume:resume表示继续、重新开始,这名字和它的职责也相同。此时Activity经过前两个阶段的初始化已经蓄势待发。Activity在这个阶段已经出现在前台并且可见了。这个阶段可以打开独占设备
  • (4)onPause:pause表示暂停,当Activity要跳到另一个Activity或应用正常退出时都会执行这个方法。此时Activity在前台并可见,我们可以进行一些轻量级的存储数据和去初始化的工作,不能太耗时,因为在跳转Activity时只有当一个Activity执行完了onPause方法后另一个Activity才会启动,而且android中指定如果onPause在500ms即0.5秒内没有执行完毕的话就会强制关闭Activity。从生命周期图中发现可以在这快速重启,但这种情况其实很罕见,比如用户切到下一个Activity的途中按back键快速得切回来。
  • (5)onStop:stop表示停止,此时Activity已经不可见了,但是Activity对象还在内存中,没有被销毁。这个阶段的主要工作也是做一些资源的回收工作。
  • (6)onDestroy:destroy表示毁灭,这个阶段Activity被销毁,不可见,我们可以将还没释放的资源释放,以及进行一些回收工作。
  • (7)onRestart:restart表示重新开始,Activity在这时可见,当用户按Home键切换到桌面后又切回来或者从后一个Activity切回前一个Activity就会触发这个方法。这里一般不做什么操作。

在这里插入图片描述

通过上面的了解我们发现其实Activity中的方法大都是两两对应的,只有onRestart方法散发着单身狗的清香。 那么相邻的方法之间有什么区别呢?

2.onCreate和onStart之间有什么区别?

  • (1)可见与不可见的区别。前者不可见,后者可见。
  • (2)执行次数的区别。onCreate方法只在Activity创建时执行一次,而onStart方法在Activity的切换以及按Home键返回桌面再切回应用的过程中被多次调用。因此Bundle数据的恢复在onStart中进行比onCreate中执行更合适。
  • (3)onCreate能做的事onStart其实都能做,但是onstart能做的事onCreate却未必适合做。如前文所说的,setContentView和资源初始化在两者都能做,然而想动画的初始化在onStart中做比较好。

3.onStart方法和onResume方法有什么区别?

  • (1)是否在前台。onStart方法中Activity可见但不在前台,不可交互,而在onResume中在前台。
  • (2)职责不同,onStart方法中主要还是进行初始化工作,而onResume方法,根据官方的建议,可以做开启动画和独占设备的操作。

4.onPause方法和onStop方法有什么区别?

  • (1)是否可见。onPause时Activity可见,onStop时Activity不可见,但Activity对象还在内存中。
  • (2)在系统内存不足的时候可能不会执行onStop方法,因此程序状态的保存、独占设备和动画的关闭、以及一些数据的保存最好在onPause中进行,但要注意不能太耗时。

5.onStop方法和onDestroy方法有什么区别?

onStop阶段Activity还没有被销毁,对象还在内存中,此时可以通过切换Activity再次回到该Activity,而onDestroy阶段Acivity被销毁

6.为什么切换Activity时各方法的执行次序是onPause→onCreate→onStart→onResume→onStop而不是onPause→onStop→onCreate→onStart→onResume

  • (1)一个Activity或多或少会占有系统资源,而在官方的建议中,onPause方法将会释放掉很多系统资源,为切换Activity提供流畅性的保障,而不需要再等多两个阶段,这样做切换更快。
  • (2)按照生命周期图的表示,如果用户在切换Activity的过程中再次切回原Activity,是在onPause方法后直接调用onResume方法的,这样比onPause→onStop→onRestart→onStart→onResume要快得多。

7.与生命周期密切相关的onSaveInstanceState方法和onRestoreInstanceState方法在什么时候执行?

通过阅读源码会发现,当targetSdkVersion小于3时onSaveInstanceState是在onPause方法中调用的,而大于3时是在onStop方法中调用的。 而onRestoreInstanceState是在onStart之后、onResume之前调用的。

Activity的几种跳转:

一:显式调用方法

方法一:

Intent intent=new Intent(本类,将要跳转的类);   
startActivity(intent);

方法二:

Intent intent2=new  Intent();
intent2.setClass(本类,另外将要跳转的类);    (intent2.setClass(MainActivity.this,shoyeActivity.class);)
startActivity(intent2);

方法三:(此方式可用于打开其它的应用)

Intent intent2=new  Intent();
intent2.setClassName(this,“将要跳转界面的名字”);
startActivity(intent2);

方法四:

Intent intent2=new  Intent();
intent2.setComponent(new ComponentName(MainActivity.this, OtherActivity.class));
startActivity(intent2);

二:隐式调用方法(只要action、category、data和将要跳转到的Activity在AndroidManifest.xml中设置的匹配就OK)

<activity
            android:name="com.saiermeng.intent.SecondActivity"
            android:label="@string/title_activity_second" >
            <intent-filter >
                <action android:name="com.saiermeng.intent.open02"/>
      //在data中设置了哪些,则哪些必须匹配,没设置的可以任意写          
<data android:scheme="http"
                    android:host="www.saiermeng.com"
                    android:port="8080"
                     android:path="/java"
                    ></data>
//因为startActivity()方法中内置了该类别,索引必须加上此类别,否则android.intent.category.DEFAULT无法跳转
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

三:跳转到另一个Activity后,当返回时能返回数据

  • 1.在跳转的Activity端,调用startActivityForResult(intent2, 2),跳转到下一个Activity,其中第一个参数为传入的意图对象,第二个为设置的请求码;

  • 2.跳转到第二个Activity后,调用setResult(10, intent)方法可返回上一个Activity,其中第一个参数为结果码,第二个为传入的意图对象;

  • 3.在第一个Activity通过onActivityResult()方法获得返回的数据。 在这里插入图片描述 在这里插入图片描述

Activity之间的数据传递

1、向目标Activity传递数据:

 Intent intent=new Intent(this,Main2Activity.class);
         //可传递多种类型的数据
         intent.putExtra("name","张三");
         intent.putExtra("age",12);
         startActivity(intent);

2、在目标Activity中取出数据

  Intent intent=getIntent();
         //用getXxxExtra()取出对应类型的数据。取出String只需要指定key
         String name=intent.getStringExtra("name");
         //取出int要指定key,还要设置默认值,当intent中没有该key对应的value时,返回设置的默认值
         int age=intent.getIntExtra("age",0);

学苑网课中心

松鼠学苑发展历程

在这里插入图片描述

主营业务

在这里插入图片描述

She教研解决方案

1、远端浏览器,从Google、GitHub、Maven等获取技术资源不再有羁绊。

2、基于Devfile的、一键式、无差别构建,基于账号的隔离独享环境,基于浏览器的全新开发模式,让你和你的 小伙伴的软件工程环境精准的一致,而且能随心所欲的创建一个新的属于你的环境。

3、全系列、分步骤镜像,让你的大数据能够从任一成功阶段继续,从裸Linux到Zookeeper、Hadoop、Tez、 Hive、Spark、Oozie、HBase,到Kafka、Flink、Ambari,All in One的Jupyter,最新版本的TensorFlow, 使用你擅长的任一语言,Python、Java、Scala、R、Julia。

4、无需任何配置,只要bind任一端口,你的应用便自动地expose出去,自动配置域名。

She平台架构

在这里插入图片描述

She是构建在docker/k8s之上、用于软件开发调试的大数据平台,平 台本身是架构在大数据集群之上的分布式系统,包括三层:计算资源管 理层、She核心调度层、应用层,应用层集合了所有课程环境,Devfile 和Workspace是其中两个核心概念:

1.Devfile是开展某项软件类开发任务所需环境的定义,那么将这个草稿 建设起来的就是Workspace,即Workspace是物理的、而Devfile是逻辑 的、是静态的:Workspace包括了物理上运行的各容器或物理机实体、端 口、命名等一干看得见摸得着的资源,所以Devfile定义了某个实训任务 的资源需求情况,如CPU、GPU、Memory、Disk等,而运行中的Work space的则实际占有了这些资源,因此,从这个意义上看,具体的实训 任务决定了She平台的硬件配置需求。

2.Devfile是She平台的预置环境,即其对应的Workspace中已经安装了 一系列版本号确定的工具,这些工具集的选择是根据这项开发任务的通 用需求而定的,是通用的;但是我们可以根据需要卸载、升级、安装相 应工具。

HFS三节点集群拓扑结构

在这里插入图片描述

为了降低实训成本,我们以三节点为例搭建HFS集群,但这个集群理论上可以水平扩展到10万点的规模。