Android Studio 学习——整体框架和概念

一、创建新项目

选择File-->New-->New Project

这里可以随便选,我一般选择Empty Activity,不同的选择,只是界面不同而已。然后静静的等待安装就可以了

二、框架结构

1)manifests

  • manifests文件是一个XML文件,它描述了应用程序的基本信息。这些信息包括应用程序的名称、图标、版本号、权限、组件等。
  • manifests文件是Android应用程序的核心文件之一,它定义了应用程序的基本结构和行为,同时也是Android系统在安装和运行应用程序时的重要依据。
  • manifests文件位于项目的根目录下的app/src/main目录中,开发者可以通过编辑manifests文件来配置应用程序的基本信息和行为。

2)Java

java文件夹中也有许多activity(名字不一定相同)文件

a、Activity生命周期

当用户浏览、退出和返回到您的应用时,您应用中的 Activity 实例会在其生命周期的不同状态间转换。Activity 类会提供许多回调,这些回调会让 Activity 知晓某个状态已经更改:系统正在创建、停止或恢复某个 Activity,或者正在销毁该 Activity 所在的进程。
在生命周期回调方法中,您可以声明用户离开和再次进入 Activity 时 Activity 的行为方式。例如,如果您正构建流媒体视频播放器,当用户切换至另一应用时,您可能要暂停视频或终止网络连接。当用户返回时,您可以重新连接网络并允许用户从同一位置继续播放视频。换言之,每个回调都支持您执行适合给定状态变更的特定作业。在合适的时间执行正确的作业,并妥善处理转换,这将提升应用的稳健性和性能。例如,良好的生命周期回调实现有助于防止应用出现以下问题:
– 当用户在使用应用时接听来电,或切换至另一应用时崩溃。
– 当用户未主动使用它时,消耗宝贵的系统资源。
– 当用户离开应用并在稍后返回时,丢失用户的进度。
– 当屏幕在横向和纵向之间旋转时,崩溃或丢失用户的进度。

  • 为了在Activity生命周期各个阶段之间导航转换,Activity类提供六个核心回调方法onCreate()、onStart()、onResume()、onPause()、onStop() 和 onDestroy()。当 Activity 进入新状态时,系统会调用其中每个回调方法。
i、Activity存在与否
  • Activity整个生命周期从onCreate()方法开始,到最终调用onDestroy()方法结束。对于Activity的全局资源在onCreate()方法中设置,最终在onDestroy()方法中进行资源回收。
ii、Activity可见与否

  • Activity触发onStart()方法后处于可见状态,但未必能与用户进行交互。当Activity完全不可见时,触发onStop()方法。重新可见时,先触发onRestart()方法,再触发onStart()方法。onStart()方法和onStop()方法可以被多次调用
iii、Activity可交互与否
  • Activity在onResume()方法和onPause()方法之间时处于活动状态,此时可以与用户进行交互。

b、Activity生命周期回调方法

i、onCreate()回调方法

onCreate 方法是 Activity 生命周期的第一个方法,即在 Activity 被创建时被调用。它的执行标志着 Activity 的启动过程中的第一个重要步骤,用于完成一些初始化设置和布局加载工作。

主要作用
设置布局:通过调用 setContentView 方法来加载指定的布局文件,将界面内容展示给用户。
初始化视图:通过 findViewById 等方法找到布局中的各种控件(如按钮、文本框等),并将其存储为类成员变量或局部变量。
绑定事件监听器:为界面上的各种控件(如按钮)设置监听器,以响应用户的交互动作。
获取数据:从 Intent 中获取启动 Activity 时传递过来的数据,或者通过其他方式初始化界面需要的数据。
进行其他初始化工作:根据应用程序的需求进行其他的初始化工作,例如设置默认值、创建数据库连接等。

ii、onStart()回调方法
  • onCreate() 退出后,Activity 将进入“已启动”状态,并对用户可见。此回调包含 Activity 进入前台与用户进行互动之前的最后准备工作。
iii、onResume()回调方法
  • 系统会在 Activity 开始与用户互动之前调用此回调。此时,该 Activity 位于 Activity 堆栈的顶部,并会捕获所有用户输入。应用的大部分核心功能都是在 onResume() 方法中实现的。
  • onResume() 回调后面总是跟着 onPause() 回调。
iv、onPause()回调方法

当 Activity 失去焦点并进入“已暂停”状态时,系统就会调用 onPause()。

例如,当用户点按“返回”或“最近使用的应用”按钮时,就会出现此状态。当系统为您的 Activity 调用 onPause() 时,从技术上来说,这意味着您的 Activity 仍然部分可见,但大多数情况下,这表明用户正在离开该 Activity,该 Activity 很快将进入“已停止”或“已恢复”状态。
如果用户希望界面继续更新,则处于“已暂停”状态的 Activity 也可以继续更新界面。例如,显示导航地图屏幕或播放媒体播放器的 Activity 就属于此类 Activity。即使此类 Activity 失去了焦点,用户仍希望其界面继续更新。
您不应使用 onPause() 来保存应用或用户数据、进行网络呼叫或执行数据库事务。有关保存数据的信息,请参阅保存和恢复 Activity 状态。
onPause() 执行完毕后,下一个回调为 onStop()或 onResume(),具体取决于 Activity 进入“已暂停”状态后发生的情况。

v、onStop()回调方法

当 Activity 对用户不再可见时,系统会调用 onStop()。出现这种情况的原因可能是 Activity 被销毁,新的 Activity 启动,或者现有的 Activity 正在进入“已恢复”状态并覆盖了已停止的 Activity。在所有这些情况下,停止的 Activity 都将完全不再可见。
系统调用的下一个回调将是 onRestart()(如果 Activity 重新与用户互动)或者 onDestroy()(如果 Activity 彻底终止)。

vi、onRestart()回调方法
  • 当处于“已停止”状态的 Activity 即将重启时,系统就会调用此回调。onRestart() 会从 Activity 停止时的状态恢复 Activity。
  • 此回调后面总是跟着 onStart()。
vii、onDestroy()回调方法
  • 系统会在销毁 Activity 之前调用此回调。
  • 此回调是 Activity 接收的最后一个回调。通常,实现 onDestroy() 是为了确保在销毁 Activity 或包含该 Activity 的进程时释放该 Activity 的所有资源。
vii、回调方法流程图

3)res

1、drawable

用于存放各种图文件,(.png,.jpg,.9png,.gif等)除此之外可能是一些其他的drawable类型的XML文件

2、layout

此目录是布局的目录,可以看到整个APP的布局和一些屏幕适配

a、LinearLayout  线性布局

LinearLayout是一个视图容器,用于使所有子视图在单个方向(垂直或水平)保持对齐,默认是控件(子视图)水平方向排列。
可以视图容器标签内使用android:orientation属性指定布局方向。
android:orientation="horizontal"时,也是此属性的默认值

  • 属性及其含义
orientation  布局中组件的排列方式
gravity控制组件所包含的子元素的对齐方式,可多个组合
layout_gravity控制该组件在父容器里的对其方式
background为该组件设置一个背景图片,或者是直接用颜色覆盖
divider分割线(可用view代替 高1dp)
showDividers设置分割线所在的位置,none(无),beginning(开始),end(结束),middle(每两个组件间)
dividerPadding  设置分割线的 padding
layout_weight(权重)该属性是用来等比例的划分剩余区域

线性布局layout设置如下:

<LinearLayout        //布局方式为线性布局
    xmlns:android="http://schemas.android.com/apk/res/android"  //匹配命令是否正确
    android:layout_width="match_parent"        //宽
    android:layout_height="match_parent"        //高
    android:orientation="horizontal" // 设置线性方向vertical为垂直hor...为水平
</LinearLayout>

android:layout_weight="0"    //控件中设置权重,设置屏幕占比,该控件占自己权重/总权重数

b、RelativeLayout  相对布局

RelativeLayout也是一个视图容器。
这意味着其中的所有控件如果不进行具体的位置确定,都将汇集在左上角(默认),存在叠图现象。
相对布局:子视图可通过设置相应的布局属性,设定相对于另一个兄弟视图或父容器视图的相对位置

相对于兄弟元素
属性名称属性含义
android:layout_below=“@id/aaa”在指定View的下方
android:layout_above=“@id/aaa”在指定View的上方
android:layout_toLeftOf=“@id/aaa”在指定View的左边
android:layout_toRightOf=“@id/aaa”在指定View的右边
android:layout_alignTop=“@id/aaa”与指定View的上边界一致
android:layout_alignBottom=“@id/aaa”与指定View下边界一致
android:layout_alignLeft=“@id/aaa”与指定View的左边界一致
android:layout_alignRight=“@id/aaa”与指定View的右边界一致
相对于父元素
属性名称属性含义
android:layout_alignParentLeft=“true”在父元素内左边
android:layout_alignParentRight=“true”在父元素内右边
android:layout_alignParentTop=“true”在父元素内顶部
android:layout_alignParentBottom=“true”在父元素内底部
对齐方式
属性名称属性含义
android:layout_centerInParent=“true”居中布局
android:layout_centerVertical=“true”垂直(竖向)居中布局
android:layout_centerHorizontal=“true”水平(横向)居中布局
间隔
属性名称属性含义
android:layout_marginBottom=“”指定该属性所在控件距下部最近控件(父容器视图或兄弟视图)的最小值
android:layout_marginLeft=“”指定该属性所在控件距左边最近控件(父容器视图或兄弟视图)的最小值
android:layout_marginRight =“”指定该属性所在控件距右边最近控件(父容器视图或兄弟视图)的最小值
android:layout_marginTop=“”指定该属性所在控件距上部最近控件(父容器视图或兄弟视图)的最小值
android:layout_paddingBottom=“”往内部元素底边缘填充距离
android:layout_paddingLeft=“”往内部元素左边缘填充距离
android:layout_paddingRight =“”往内部元素右边缘填充距离
android:layout_paddingTop=“”往内部元素上边缘填充距离
c、AbsoluteLayout 绝对布局 

Android:layout_x                                 //x坐标

Android:layout_y                                 //y坐标

<AbsoluteLayout                                                                                //决对布局

xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >   

d、TableLayout   表格布局

默认占用一行

android:collapseColumns            设置需要被隐藏的列的序号,从0开始设置
android:stretchColumns 允许被拉伸的列的列序号,从0开始
android:shrinkcolumns设置允许被收缩的列的列序号,从0开始
android:layout_column显示在第几列
android:layout_span 横向跨几列
e、GridLayout  (比表格布局更灵活)

网络布局:默认情况下所有控件,显示到一列里面,水平排列。

android:orientation 设置水平显示还是垂直显示
android:columnCount设置行的显示个数
android:rowCount   设置列的显示个数

子控件属性

android:layout_column   显示在第几列
android:layout columnSpan  横向跨几列
android:layout_columnWeight      横向剩余空间分配方式
android:layout_gravity  在网格中的显示位置
android:layout_row   显示在第几行
android:layout rowSpan   横向跨几行
android:layout_rowWeight纵向剩余空间分配方式
f、 FrameLayout  帧布局、ConstraintLayout   约束布局

帧布局、约束布局不太常用,用到的时候再总结

3、menu

顾名思义是菜单相关的,因为现在基本都是全面屏的手机,所以我们需要在APK的内部进行一些一些菜单设置,都会在这个目录里面

4、mipmap

mipmap目录用于存放一些不同分辨率的图像:

  • mipmap文件夹:这个文件夹用于存放不同分辨率的启动图标。当应用启动时,系统会根据设备的屏幕密度来选择合适的图标资源,这样可以保证图标在不同分辨率的设备上都能清晰显示。
  • 分辨率目录:Android系统提供了多个分辨率目录,如hdpi(高密度)、mdpi(中等密度)、xhdpi(超高密度)、xxhdpi(极高密度)等。开发者可以将相同名称的图片放在这些不同的目录下,图片的尺寸和像素会根据目录的密度级别进行调整。
  • 资源选择原则:如果某个分辨率目录下缺少资源,系统会寻找最接近的密度级别来加载资源。例如,如果ldpi目录下没有资源,系统会加载hdpi目录下的资源;如果ldpi和hdpi目录下都有资源,但mdpi目录下没有,系统会加载mdpi目录下的资源。
  • 禁止自动选择:如果开发者不希望系统根据屏幕密度自动选择资源,可以在AndroidManifest.xml文件中添加android:anyDensity="false"属性。这样,系统就不会根据设备的屏幕密度来选择不同目录下的资源,而是会使用指定的资源。

mipmap-hdpi:高分辨率,一般我们把图片丢这里
mipmap-mdpi:中等分辨率,很少,除非兼容的的手机很旧
mipmap-xhdpi:超高分辨率,手机屏幕材质越来越好,以后估计会慢慢往这里过渡
mipmap-xxhdpi:超超高分辨率,这个在高端机上有所体现

5、value目录

也算是一个很重要的目录,因为一些资源的样子、颜色都会在这个里面进行设置

demens.xml定义尺寸资源
string.xml定义字符串资源
styles.xml定义样式资源
colors.xml定义颜色资源
arrays.xml定义数组资源
attrs.xml自定义控件时用的较多,自定义控件的属性

theme主题文件,和styles很相似,但是会对整个应用中的Actvitiy或指定Activity起作用,一般是改变窗口外观的!可在Java代码中通过setTheme使用,或者在Androidmanifest.xml中为<application…>添加theme的属性!

6、RAW目录

用于存放各种原生资源(音频,视频,一些XML文件等),我们可以通过openRawResource(int id)来获得资源的二进制流!

三、重要文件

1)MainActivity.java文件(文件名可不同)

MainActivity.java 相当于是开始,从这里引用包,重写副类这些,

MainActivity.java是程序运行的主代码区,这里可以引入activity_main.xml中声明的控件button等,也可以通过intent(意图)向其他activity申请实现活动之间的交互,也就是手机页面的跳转,通过AndroidManifest.xml里面intent-filter过滤器的筛选看是哪个别的activity进行响应处理,也就是跳转到哪个页面。

2)activity_main.xml文件

activity_main.xml 其实就相当于一个布局文件的XML配置,这里面去设置一些按钮大小位置等等。

3)AndroidManifest.xml 配置文件

用于储存本项目的活动及其对应响应处理方式。

四、参考文章

android studio学习(1)-整体框架数理_android studio框架-CSDN博客

关于AndroidStudio中的onCreate方法-CSDN博客

Android studio - 布局_android studio怎么切换布局-CSDN博客

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

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

相关文章

「JVM详解」

JVM JVM概述 基本介绍 JVM&#xff1a;全称 Java Virtual Machine&#xff0c;即 Java 虚拟机&#xff0c;一种规范&#xff0c;本身是一个虚拟计算机&#xff0c;直接和操作系统进行交互&#xff0c;与硬件不直接交互&#xff0c;而操作系统可以帮我们完成和硬件进行交互的…

Serverless架构在实时数据处理中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Serverless架构在实时数据处理中的应用 Serverless架构在实时数据处理中的应用 Serverless架构在实时数据处理中的应用 引言 Ser…

【Android、IOS、Flutter、鸿蒙、ReactNative 】标题栏

Android 标题栏 参考 Android Studio版本 配置gradle镜像 阿里云 Android使用 android:theme 显示标题栏 添加依赖 dependencies {implementation("androidx.appcompat:appcompat:1.6.1")implementation("com.google.android.material:material:1.9.0")…

pytorch量化训练

训练时量化&#xff08;Quantization-aware Training, QAT&#xff09;是一种在模型训练过程中&#xff0c;通过模拟低精度量化效应来增强模型对量化操作的鲁棒性的技术。与后训练量化不同&#xff0c;QAT 允许模型在训练过程中考虑到量化引入的误差&#xff0c;从而在实际部署…

使用Java绘制图片边框,解决微信小程序map组件中marker与label层级关系问题,label增加外边框后显示不能置与marker上面

今天上线的时候发现系统不同显示好像不一样&#xff0c;苹果手机打开的时候是正常的&#xff0c;但是一旦用安卓手机打开就会出现label不置顶的情况。尝试了很多种办法&#xff0c;也在官方查看了map相关的文档&#xff0c;发现并没有给label设置zIndex的属性&#xff0c;只看到…

Redisson的可重入锁

初始状态&#xff1a; 表示系统或资源在没有线程持有锁的情况下的状态&#xff0c;任何线程都可以尝试获取锁。 线程 1 获得锁&#xff1a; 线程 1 首次获取了锁并进入受保护的代码区域。 线程 1 再次请求锁&#xff1a; 在持有锁的情况下&#xff0c;线程 1 再次请求锁&a…

三周精通FastAPI:37 包含 WSGI - Flask,Django,Pyramid 以及其它

官方文档&#xff1a;https://fastapi.tiangolo.com/zh/advanced/wsgi/ 包含 WSGI - Flask&#xff0c;Django&#xff0c;其它 您可以挂载多个 WSGI 应用&#xff0c;正如您在 Sub Applications - Mounts, Behind a Proxy 中所看到的那样。 为此, 您可以使用 WSGIMiddlewar…

Swagger UI

Swagger UI 是一个开源工具&#xff0c;用于可视化、构建和交互式地探索 RESTful API。 它是 Swagger 生态系统的一部分&#xff0c;Swagger 是一套用于描述、生成、调用和可视化 RESTful Web 服务的工具和规范。 Swagger UI 可以自动生成 API 文档&#xff0c;并提供一个交互…

thinkphp6 --数据库操作 增删改查

一、数据库连接配置 如果是本地测试&#xff0c;它会优先读取 .env 配置&#xff0c;然后再读取 database.php 的配置&#xff1b; 如果禁用了 .env 配置&#xff0c;则会读取数据库连接的默认配置&#xff1a; # .env文件&#xff0c;部署服务器&#xff0c;请禁用我 我们可以…

【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-最大的数

CL13 最大的数(20 分) 输入一个有 n 个无重复元素的整数数组 a&#xff0c;输出数组中最大的数。提示&#xff1a;如使用排序库函数 sort()&#xff0c;需要包含头文件#include 。输入&#xff1a; 第一行是一个正整数 n(2<n<20)&#xff1b; 第二行包含 n 个不重复的整…

让Git走代理

有时候idea提交代码或者从github拉取代码&#xff0c;一直报错超时或者:Recv failure: Connection was reset,下面记录一下怎么让git走代理从而访问到github。 1.打开梯子 2.打开网络和Internet设置 3.设置代理 记住这个地址和端口 4.打开git bash终端 输入以下内容 git c…

vivo 游戏中心包体积优化方案与实践

作者&#xff1a;来自 vivo 互联网大前端团队- Ke Jie 介绍 App 包体积优化的必要性&#xff0c;游戏中心 App 在实际优化过程中的有效措施&#xff0c;包括一些优化建议以及优化思路。 一、包体积优化的必要性 安装包大小与下载转化率的关系大致是成反比的&#xff0c;即安装…

Struts扫盲

Struts扫盲 这里的struts是struts1。以本文记录我的那些复习JavaEE的痛苦并快乐的晚上 Struts是什么 框架的概念想必大家都清楚&#xff0c;框架即“半成品代码”&#xff0c;是为了简化开发而设计的。一个项目有许多分层&#xff0c;拿一个MVC架构的Web应用来说&#xff0c;有…

【AiPPT-注册/登录安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

自动驾驶系列—从数据采集到存储:解密自动驾驶传感器数据采集盒子的关键技术

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

【月之暗面kimi-注册/登录安全分析报告】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

时序预测 | 改进图卷积+informer时间序列预测,pytorch架构

时序预测 | 改进图卷积informer时间序列预测&#xff0c;pytorch架构 目录 时序预测 | 改进图卷积informer时间序列预测&#xff0c;pytorch架构预测效果基本介绍参考资料 预测效果 基本介绍 改进图卷积informer时间序列预测代码 CTR-GC卷积,informer&#xff0c;CTR-GC 图卷积…

从入门到精通:一文掌握 Dockerfile 的用法!(多阶段构建与缓存优化)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Dockerfile基础用法 📒📝 什么是 Dockerfile?📝 Dockerfile 的常见指令🔖 构建指令🔖 命令指令🎈 完整示例:构建一个 Python Flask 应用🔖 1. 项目结构🔖 2. 编写 Dockerfile🔖 3. 构建和运行 Docker 镜像�…

Go语言开发基于SQLite数据库实现用户表修改接口(四)

背景 上一章 Go语言开发基于SQLite数据库实现用户表查询详情接口(三) 这一章我们实现用户表的修改接口 代码实现 mapper层 type UserMapper interface {UpdateById(user *model.User, id uint64) error}type userMapper struct { }func (m *userMapper) UpdateById(user *m…

【C++学习(35)】在Linux中基于ucontext实现C++实现协程(Coroutine),基于C++20的co_await 协程的关键字实现协程

文章目录 为什么使用协程协程的理解协程优势协程的原语操作yield 与 resume 是一个switch操作&#xff08;三种实现方式&#xff09;&#xff1a; 基于 ucontext 的协程基于 XFiber 库的操作1 包装上下文2 XFiber 上下文调度器2.1 CreateFiber2.2 Dispatch 基于C20的co_return …