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;而操作系统可以帮我们完成和硬件进行交互的…

两种鼠标hover切换对应图片方法对比

方法一&#xff1a;鼠标hover时使用JS给元素添加类名达到切换图片效果 <!-- hover元素 --> <div class"hover-div"><ul><li class"hover-div-item" data-index"1">当鼠标hover我切换对应的图片1</li><li class…

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

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

day14|static关键字和const关键字的作用、常量指针和指针常量之间有什么区别、结构体和类之间有什么区别

day14|C重难点之 static关键字和const关键字的作用、常量指针和指针常量之间有什么区别、结构体和类之间有什么区别 37.static关键字和const关键字的作用38.常量指针和指针常量之间有什么区别39.结构体和类之间有什么区别 37.static关键字和const关键字的作用 1. static 关键字…

【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;从而在实际部署…

docker--工作目录迁移

前言 安装docker&#xff0c;默认的情况容器的默认存储路径会存储系统盘的 /var/lib/docker 目录下&#xff0c;系统盘一般默认 50G&#xff0c;容器输出的所有的日志&#xff0c;文件&#xff0c;镜像&#xff0c;都会存在这个地方&#xff0c;时间久了就会占满系统盘。 一、…

开发效率工具链全解析

&#x1f6e0; 开发效率工具链全解析&#xff1a;从入门到精通 在现代前端开发中&#xff0c;高效的工具链对于提升开发效率至关重要。本文将全方位剖析项目脚手架、包管理工具以及构建工具的深度集成与实战应用。 &#x1f4d1; 内容导航 工具链概述项目脚手架包管理工具常见…

[ 网络安全介绍 3 ] 网络安全事件相关案例有哪些?

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

【Unity基础】Unity中碰撞及触发类物理交互应用场景说明

一、碰撞类回调方法 在Unity中&#xff0c;碰撞类回调方法是用于处理物体间碰撞的逻辑。这些方法常用于 MonoBehaviour 脚本中&#xff0c;以便在物体发生碰撞时进行响应。以下是最常用的三个碰撞类回调方法的详细说明&#xff1a; 1. OnCollisionEnter(Collision collision)…

【MySQL】MySQL中的函数之REGEXP_SUBSTR

在 MySQL 中&#xff0c;REGEXP_SUBSTR() 函数用于从字符串中提取与正则表达式匹配的子串。这个函数也是从 MySQL 8.0 开始引入的。下面是一些关于如何使用 REGEXP_SUBSTR() 的详细说明和示例。 基本语法 REGEXP_SUBSTR(str, pat [, position [, occurrence [, match_type ]]…

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

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

arm64架构的linux 配置vm_page_prot方式

在 ARM64 架构上&#xff0c;通过 vm_page_prot 属性可以修改 UIO 映射内存的访问权限及缓存策略&#xff0c;常见的有非缓存&#xff08;Non-cached&#xff09;、写合并&#xff08;Write Combine&#xff09;等。下面是 ARM64 常用的 vm_page_prot 设置及其对应的操作方式。…

Redisson的可重入锁

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

探秘Spring Boot中的@Conditional注解

文章目录 1. 什么是Conditional注解&#xff1f;2. 为什么需要Conditional注解&#xff1f;3. 如何使用Conditional注解&#xff1f;4. Conditional注解的高级用法5. 注意事项6. 结语推荐阅读文章 在Spring Boot的世界里&#xff0c;配置的灵活性和多样性是至关重要的。有时候&…

三周精通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;请禁用我 我们可以…

WPF中MVVM工具包 CommunityToolkit.Mvvm

CommunityToolkit.Mvvm&#xff0c;也称为MVVM工具包&#xff0c;是Microsoft Community Toolkit的一部分。它是一个轻量级但功能强大的MVVM&#xff08;Model-View-ViewModel&#xff09;库&#xff0c;旨在帮助开发者更容易地实现MVVM设计模式。 特点 独立于平台和运行时&a…

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

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