博客
关于我
安卓开发(三) Activity与布局
阅读量:500 次
发布时间:2019-03-07

本文共 5123 字,大约阅读时间需要 17 分钟。

文章目录

三 Activity与布局

3.1 Activity生命周期

参考资料:https://www.cnblogs.com/zhangmiao14/p/10754565.html

在这里插入图片描述

生命周期方法 作用 说明
onCreate 表示 Activity 正在被创建 activity 被创建时调用,一般在这个方法中进行活动的初始化工作,如设置布局工作、加载数据、绑定控件等。
onRestart 表示 Activity 正在重新启动 这个回调代表了 Activity 由完全不可见重新变为可见的过程,当 Activity 经历了 onStop() 回调变为完全不可见后,如果用户返回原 Activity,便会触发该回调,并且紧接着会触发 onStart() 来使活动重新可见。
onStart 表示 Activity 正在被启动 经历该回调后,Activity 由不可见变为可见,但此时处于后台可见,还不能和用户进行交互。
onResume 表示 Activity 已经可见 已经可见的 Activity 从后台来到前台,可以和用户进行交互。
onPause 表示 Activity 正在停止 当用户启动了新的 Activity ,原来的 Activity 不再处于前台,也无法与用户进行交互,并且紧接着就会调用 onStop() 方法,但如果用户这时立刻按返回键回到原 Activity ,就会调用 onResume() 方法让活动重新回到前台。而且在官方文档中给出了说明,不允许在 onPause() 方法中执行耗时操作,因为这会影响到新 Activity 的启动。
onStop 表示 Activity 即将停止 这个回调代表了 Activity 由可见变为完全不可见,在这里可以进行一些稍微重量级的操作。需要注意的是,处于 onPause() 和 onStop() 回调后的 Activity 优先级很低,当有优先级更高的应用需要内存时,该应用就会被杀死,那么当再次返回原 Activity 的时候,会重新调用 Activity 的onCreate()方法。
onDestroy 表示 Activity 即将被销毁 来到了这个回调,说明 Activity 即将被销毁,应该将资源的回收和释放工作在该方法中执行。
  • 常见的回调
情况 回调
第一次启动 onCreate() -> onStart() -> onResume()
从 A 跳转到 B A_onPause() -> B_onCreate() -> B_onStart() -> B_onResume() -> A_onStop()
从 B 再次回到 A B_onPause() -> A_onRestart() -> A_onStart() -> A_onResume() -> B_onStop()
用户按 home 键 onPause() -> onStop()
按 home 键后回到应用 onRestart() -> onStart() -> onResume()
用户按电源键屏保 onPause() -> onStop()
用户按电源键亮屏 onRestart() -> onStart() -> onResume()
用户按 back 键回退 onPause() -> onStop() -> onDestroy()
package com.shu;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;public class SecondActivity extends AppCompatActivity {       @Override    protected void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);        System.out.println("生命周期创造了");    }    @Override    protected void onStart() {           super.onStart();        System.out.println("生命周期开始了了");    }    @Override    protected void onRestart() {           super.onRestart();        System.out.println("生命周期重复了");    }    @Override    protected void onResume() {           super.onResume();        System.out.println("用户已经可见了");    }    @Override    protected void onPause() {           super.onPause();        System.out.println("生命周期正在停止了");    }    @Override    protected void onStop() {           super.onStop();        System.out.println("生命周期停止了");    }    @Override    protected void onDestroy() {           super.onDestroy();        System.out.println("生命周期销毁了");    }}

在这里插入图片描述

  • 关于生命周期常见问题
问题 回调
由活动 A 启动活动 B时,活动 A 的 onPause() 与 活动 B 的 onResume() 哪一个先执行? 活动 A 的 onPause() 先执行,活动 B 的 onResume() 方法后执行
标准 Dialog 是否会对生命周期产生影响 没有影响
全屏 Dialog 是否会对生命周期产生影响 没有影响
主题为 Dialog 的 Activity 是否会对生命周期产生影响 有影响,与跳转 Activity 一样

3.2 布局理论

View

  • ViewAndroid中可以理解为视图。它占据屏幕上的一块矩形区域,负责提供 组件绘制和事件处理的方法。
  • View类是所有的widgets组件的基类。
  • View类位于android.view包中;View类的子类一般都位于android.widget包中。

viewGroup

  • ViewGroup在Android中可以理解为容器。

  • ViewGroup类继承自View类,它是View类的扩 展,是用来容纳其他组件的容器;

  • ViewGroup是一个抽象类,在实际应用中使用ViewGroup的子类来作为容器的。

  • ViewGroup.MarginLayoutParamsViewGroup.LayoutParams

  • ViewGroup是一个抽象类,也是其他容器类的基类。它的一些实现类有: LinearLayout(线性布局)RelativeLayout(相对布局)TableLayout(表格布局) FrameLayout(帧布局),AbsoluteLayout(绝对布局),GridLayout(网格布局)

Padding和Margins

  • Padding:在View的顶部、底部、左侧和右侧的填充像素,也称为内边距。 它设置的是内容与View边缘的距离。Padding将占据View的宽度和高度。 设置指定的内边距后,视图内容将偏离View边缘指定的距离。
  • Margins:组件的顶部、底部、左侧和右侧的空白区域,称为外边距。它 设置的是组件与其父容器的距离。Margins不占据组件的宽度和高度。为 组件设置外边距后,该组件将远离父容器指定的距离,如果还有相邻组件, 那么也将远离其相邻组件指定距离

3.3 线性布局LinearLayout

常用属性

在这里插入图片描述

android:gravity:是对view控件本身来说的,是用来设置view本身的内容 应该显示在view的什么位置,默认值是左侧

android:layout_gravity:是相对于包含该元素的父元素来说的,设置该元 素在父元素的什么位置

权重 用来等比例划分(weight

3.4 帧布局FrameLayout

FrameLayout(帧布局)可以说是六大布局中最为简单的一个布局,这个布局直接在屏幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把他们放到这块区域的左上角。

  • android:foreground:设置改帧布局容器的前景图像
  • android:foregroundGravity:设置前景图像显示的位置
  • ScrollViewHorizontalScrollView,分别支持视图的垂直滚动和水平滚动。

3.5 相对布局 RelativeLayout

  • 通过指定界面元素与其他元素的相对位置关系,确定界面中所有元素的布 局位置
  • 特点:灵活,最大程度保证在各种屏幕类型的手机上正确显示
  • 在众多布局中,推荐使用相对布局

父容器布局

在这里插入图片描述

在这里插入图片描述

控件布局

在这里插入图片描述

在这里插入图片描述

3.6 表格布局TableLayout

TableLayout的用法还是很简单的,无非就是确定表格的行数,以及使用 那三个属性来设置每一行中的第某列的元素隐藏,拉伸,或者收缩即可!

  • android:collapseColumns:设置需要被隐藏的列的序号
  • android:shrinkColumns:设置允许被收缩的列的列序号
  • android:stretchColumns:设置运行被拉伸的列的列序号
  • 以上这三个属性的列号都是从0开始算的,比如shrinkColunmns = “2”,对应的是第三列!

3.7 网格布局GridLayout

网格布局(GridLayout)与表格布局相似,用 一组无限细的直线将界面分割成行、列、单 元。然后,指定控件显示的区域和控件在该 区域的显示方式。网格布局实现了控件的交 错显示,避免使用布局嵌套,更有利于自由 编辑布局的开发。

  • 可以自己设置布局中组件的排列方式
  • 可以自定义网格布局有多少行,多少列
  • 可以直接设置组件位于某行某列
  • 可以设置组件横跨几行或者几列

在这里插入图片描述

3.8 主题切换

[

在这里插入图片描述

3.9 Android中的单位

  • px(像素):屏幕上的点,pixels(像素)不同设备显示效果相同
  • in(英寸):长度单位
  • mm(毫米):长度单位
  • pt(磅):1/72英寸
  • dp(与密度无关的像素):一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp = 1px
  • dip:与dp相同, device independent pixels(设备独立像素). 不同设备有不同的显示效果,多用于 Google示例中。
  • sp(与刻度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放.scaled pixels(放大 像素). 主要用于字体显示best for textsize。
  • 尽量使用dp作为空间大小单位,sp作为和文字相关大小单
你可能感兴趣的文章
Webpack 基本环境搭建
查看>>
mysql5.7 安装版 表不能输入汉字解决方案
查看>>
MySQL5.7.18主从复制搭建(一主一从)
查看>>
MySQL5.7.19-win64安装启动
查看>>
mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
查看>>
MySQL5.7.37windows解压版的安装使用
查看>>
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>