Android 移动应用开发 创建第一个Android项目
文章目录
- 一、创建第一个Android项目
- 1.1 准备好Android Studio
- 1.2 运行程序
- 1.3 程序结构是什么
- app下的结构
- res - 子目录(所有图片、布局、字
- AndroidManifest.xml 有四大组件,程序添加权限声明
- Project下的结构
- 二、开发android时,部分库下载异常慢
- 2.1 项目中更换下载仓库
- 2.2 离线模式配置 Gradle
- 三、Kotlin代码
- 3.1 变量
- 3.2 函数
- 3.3 条件控制
- 3.3.1 if条件语句
- 3.3.2 when条件语句
- 3.4 for-in循环
- 使用step跳过区间内的元素
- 可以使用`until`关键字来创建一个左闭右开的区间,
- downTo遍历降序区间
- 3.5 面向对象编程
- 3.5.1 继承
- 四、活动
- 4.1 创建活动
- 4.1.1 Android Studio 会自动在AndroidManifest文件中注册
- 4.1.2 活动中使用Toast
- 写法
- LENGTH_SHORT=0
- LENGTH_LONG = 1
- 4.1.3 menu
一、创建第一个Android项目
1.1 准备好Android Studio
选择
写信息
等待构建Gradle
可以选择我们的模拟器,甚至我们可以通过手机屏幕共享的方式,把手机的开发者模式打开等操作,下载到本机手机之中,可以0距离的感受,程序之美。
1.2 运行程序
1.3 程序结构是什么
app下的结构
这种的结构化的项目简洁明了,提高开发效率和代码质量
build - 编译时自动生成的文件
libs - 第三方jar包放在libs目录下
java - 放置所需Java 代码,自动生成了一个MainActivity 文件
res - 子目录(所有图片、布局、字
符串等资源)
我们应该创建不同分辨率的目录,如drawable-hdpi、drawable-xhdpi、drawable-xxhdpi等,并在制作程序时提供几个不同分辨率的版本,是为了适应不同设备的屏幕密度和分辨率
打开我们的子目录
这里面就是我们配置的字符串,调用使用,不用全局在中出现相同的多次构建
怎么构建
在XML中通过@string/app_name可以获得该字符串的引用。
最终
点击可以替换
AndroidManifest.xml 有四大组件,程序添加权限声明
MainActivity
res/layout 目录下的activity_main.xml
Project下的结构
-
.gradle 文件夹:包含Gradle构建系统生成的缓存文件和临时文件。
-
.idea 文件夹:包含项目相关的IDE配置文件,如编译器设置、运行配置等。
-
app 文件夹:是Android应用程序的主要代码和资源目录。
-
- java 文件夹:包含Java源代码文件。- res 文件夹:包含应用程序所需的资源文件,如布局文件、图像文件、字符串等。- AndroidManifest.xml 文件:包含应用程序的清单文件,定义了应用程序的基本信息、权限、组件、界面等。
-
test 文件夹:包含单元测试的源代码和资源文件。
-
androidTest 文件夹:包含Android测试的源代码和资源文件。
-
build.gradle 文件:定义了应用程序的构建配置,包括依赖项、版本号等。
-
proguard-rules.pro 文件:定义了混淆规则,用于在发布时压缩、优化和混淆应用程序的代码。
-
-
build 文件夹:包含构建生成的输出文件,如APK文件、中间文件等。
-
gradle 文件夹:包含Gradle构建系统的配置文件和插件。
-
wrapper 文件夹:包含Gradle的包装器文件,用于自动下载和管理Gradle的版本。
-
.gitignore 版本控制
-
build.gradle 文件:定义了项目级别的构建配置,如Gradle版本、插件等。
-
gradle.properties 文件:包含Gradle属性的配置文件。
-
gradlew 和 gradlew.bat 文件:Gradle的命令行构建脚本,可在命令行界面中使用。
-
-
settings.gradle 文件:定义了项目的模块和构建设置。
这是Android Studio项目的基本目录结构,其中最重要的部分是app 文件夹,它包含了应用程序的源代码和资源文件。其他文件夹和文件用于项目的构建和配置。
二、开发android时,部分库下载异常慢
2.1 项目中更换下载仓库
maven { url 'https://maven.aliyun.com/repository/public/' }
maven { url 'https://maven.aliyun.com/repository/google/' }
maven { url 'https://maven.aliyun.com/repository/jcenter/' }
maven { url 'https://maven.aliyun.com/repository/central/' }
2.2 离线模式配置 Gradle
将 Gradle.zip 解压到 “C:\User\你的用户名.gradle\wrapper\dists” 下,最终路径为: “C:\User\你的用户名.gradle\wrapper\dists\gradle-7.4-bin” 和 “C:\User\你的用户名.gradle\wrapper\dists\gradle-8.0-bin”
三、Kotlin代码
3.1 变量
使用val(value 的简写)声明一个变量时,该变量被视为不可变的,即在初始赋值之后无法重新赋值。这类似于Java中的final变量。
使用var(variable 的简写)声明一个变量时,该变量被视为可变的,即在初始赋值之后仍然可以重新赋值。这类似于Java中的非final变量。
Kotlin 中没有基础数据类型,只有封装的数字类型,你每定义的一个变量,其实 Kotlin 帮你封装了一个对象,这样可以保证不会出现空指针。
# 显式地声明了变量a为Int类型
val a: Int = 10
3.2 函数
参数的声明格式是“参数名: 参数类型”,其中参数名也是可以随便定义的
fun main() {println(fun1(1, 2))
}
fun fun1(num1:Int,num2: Int):Int{return num1+num2
}
3.3 条件控制
3.3.1 if条件语句
var value = 0
if (num1 > num2) {
value = num1} else {
value = num2}
Kotlin中的if语句相比于Java 有一个额外的功能,它是可以有返回值的
val result = if (条件表达式) {// 如果条件为真,则返回这里的值
} else {// 如果条件为假,则返回这里的值
}
例子
fun fun1(num1: Int, num2: Int): Int {return if (num1 > num2) {
num1} else {
num2}
}
fun fun1(num1: Int, num2: Int) = if (num1 > num2) {num1
} else {num2
}
再次
val max = if (a > b) a else b
fun fun1(num1: Int, num2: Int)= if (num1 > num2) num1 else num2
3.3.2 when条件语句
这种直通式
匹配值 -> { 执行逻辑 }
when (条件表达式) {值1 -> {// 如果条件匹配值1,则执行这里的代码块}值2 -> {// 如果条件匹配值2,则执行这里的代码块}else -> {// 如果条件都不匹配,则执行这里的代码块}
}
is关键字就是类型匹配的核心,相当于Java 中的instanceof关键字。
when (num) {
is Int -> println("number is Int")
is Double -> println("number is Double")
else -> println("number not support")}
3.4 for-in循环
kotlin的while和Java 中的while循环没有任何区别
fun main() {val range = 0..10for (i in range step 2) {println(i)}
}
使用step跳过区间内的元素
可以使用until
关键字来创建一个左闭右开的区间,
downTo遍历降序区间
3.5 面向对象编程
class Person {var name: String = ""var age=0fun show(){println("Name: $name, Age: $age")println(name +"is" + age + " years old.")}
}fun main() {val p = Person()p.name = "Alice"p.age = 30p.show() // Output: Name: Alice, Age: 30
}
第一个打印语句使用了字符串模板( n a m e 和 name和 name和age),将属性name和age的值插入到输出语句中,打印出"Name: Alice, Age: 30"。
第二个打印语句使用了字符串拼接(name +“is” + age + " years old.“),将属性name、字符串"is”、属性age和字符串" years old.“拼接在一起,打印出"Alice is 30 years old.”。
3.5.1 继承
在Person类的前面加上open关键字就可以了
要让Student类继承Person类
在Java 中继承的关键字是extends,而在Kotlin中是一个冒号
open class Person {var name: String = ""var age=0fun show(){println("Name: $name, Age: $age")println(name +"is" + age + " years old.")}
}
class Student :Person(){var grade:Int=0fun shows(){println("Name: $name, Age: $age, Grade: $grade")}}
fun main() {val s=Student()s.name="Bob"s.age=20s.grade=3s.shows() //Output: Name: Bob, Age: 20, Grade: 3
}
四、活动
活动是安卓应用的主要组件之一,安卓中的活动(Activity)是指用户交互界面的一部分,它通常对应应用程序中的一个屏幕。
通过管理活动的生命周期(创建、启动、恢复、暂停、停止和销毁),我们作为开发者可以控制活动的状态和行为。
活动之间可以通过意图(Intent)进行跳转和通信。
把各种控件和视图,按钮、文本框、图像等联系起来,启动其他活动或从其他活动返回,用户可以在不同的界面之间进行切换和交互。
总之,活动作为安卓应用程序的一个重要组件,负责用户界面的展示和交互处理,使得用户可以与应用程序进行互动。
4.1 创建活动
在com.example.hellowolrd包下 ->New ->Activity ->Empty Activity
我们的两个活动:
4.1.1 Android Studio 会自动在AndroidManifest文件中注册
我们打开app/src/main/AndroidManifest.xml文件代码如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" ><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.MyApplication"tools:targetApi="31" ><activityandroid:name=".OtherActivity"android:exported="false" /><activityandroid:name=".MainActivity"android:exported="true" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
4.1.2 活动中使用Toast
Toast会在屏幕上显示一段时间,用于在应用程序的界面上显示一条简短的消息,然后自动消失。
写法
// 要显示的消息文本
String message = "Hello, Toast!";
// 创建并显示Toast
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
当调用makeText()方法,并通过链式调用show()
方法来创建并显示Toast。getApplicationContext()
是一种获取当前活动上下文的方法,可以在活动中使用。
需要注意的是,Toast的 makeText()
方法返回的是一个Toast对象,可以通过调用show()
方法来显示。
在调用show()
方法后,Toast会在屏幕上显示一段时间,然后自动消失。
LENGTH_SHORT=0
Android 短时间的Toast
LENGTH_LONG = 1
Android 长时间的Toast
4.1.3 menu
相关文章:

Android 移动应用开发 创建第一个Android项目
文章目录 一、创建第一个Android项目1.1 准备好Android Studio1.2 运行程序1.3 程序结构是什么app下的结构res - 子目录(所有图片、布局、字AndroidManifest.xml 有四大组件,程序添加权限声明 Project下的结构 二、开发android时,部分库下载异…...

MATLAB语音去噪系统
目录 一、背景 二、GUI页面 三、程序 3.1 LMS滤波程序 3.2 GUI程序 四、附录 一、背景 本文介绍了一种最佳的自适应滤波器结构,该结构采用最小均方差(LMS)作为判据,通过不断迭代自适应结构来调整得到最佳滤波器…...

小程序-上传图片功能
技术前置: 1.框架采用colorUI 2.原生开发 功能: 上传图片 1.上传已经拍摄的图片 2.实时拍摄上传 3.设置上传图片数量,每次上传数量 4.上传等待 ChooseImage() {if(this.data.imgList.length>4){_this.ErrorEvent("最多上传4…...
alist基本用法@文档阅读@挂载网盘@网盘webdav挂载
文章目录 alist官网alist网站风格说明alist软件版本 安装和启动使用必看文档👺alist for android版本启动alist网页 典型用例挂载阿里云盘open获取阿里云令牌 主页检查挂载情况 常用页面以配置挂载列表管理配置页面 配置文件和目录👺FAQ可能遇到的错误检…...

Hive正则表达式
Hive版本:hive-3.1.2 一、Hive的正则表达式概述 正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。 Hive的正则表达式灵活使用解决HQL开发过程中的很多问题,本篇文…...
ubuntu20.04-编译安装Qt5.15.2-C++
文章目录 步骤一:安装依赖项步骤二:下载Qt 5.15源代码步骤三:配置并编译Qt步骤四:配置环境变量注意事项更新于2024年 在Ubuntu 22.04 LTS(Jammy Jellyfish)环境下编译Qt 5.15,由于Ubuntu 22.04的…...
【PTA|期末复习|编程题】数组相关编程题(二)
目录 7-1 数组元素循环右移问题(20分) 输入格式: 输出格式: 输入样例: 输出样例: 代码 7-2 找出不是两个数组共有的元素(20分) 输入格式: 输出格式: 输入样例: 输出样例: 代码 7-3 方阵循环右移(20分) 输入格式: 输出格式: 输入样例&…...

重温阿里云宝塔面板部署前后端项目
首先祝大家新年快乐啊! 回到老家,便打算趁这一段空闲时间提升一下自己,重点是学习实践一下echarts相关内容,很多公司项目都需要实现可视化,所以在bilibili上找了黑马的一个教程开始学习,不同的是ÿ…...

6个好看的wordpress模板
简站wordpress服务业通用主题 2023年立秋纪念版,简站wordpress服务行业通用主题,适合服务行业企业官网使用。 https://www.jianzhanpress.com/?p5393 小语种翻译wordpress主题 小语种国家外贸网站建设需要的wordpress主题模板,适合做小语…...

零基础学python之高级编程(1)---面向对象编程及其类的创建
面向对象编程及其类的创建 文章目录 面向对象编程及其类的创建前言一、面向过程编程和面向对象编程的概念1.面向过程编程(Procedural Programming)2.面向对象编程(Object-Oriented Programming,OOP) 二、面向对象编程基础1.初识类(class)和对象调用方法 2.类中的两种…...

[C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
问题描述 WPF中DataGrid的选中行或选中者单元格,在焦点失去后,颜色会很淡,很不明显,不容易区分。 解决方法 在失去焦点的情况下,如何设置行或单元格与选中的时候颜色一样? <DataGrid.Resources>&…...

单片机学习笔记---串口通信(1)
目录 通信的基本概念 通信的方式 1.按照数据传送的方式,可分为串行通信和并行通信。 1.1串行通信 1.2并行通信 2.按照通信的数据同步方式,又可以分为异步通信和同步通信。 2.1 异步通信 2.2同步通信 3.按照数据的传输方向,又可以分为…...

熔断机制解析:如何用Hystrix保障微服务的稳定性
微服务与系统的弹性设计 大家好,我是小黑,在讲Hystrix之前,咱们得先聊聊微服务架构。想象一下,你把一个大型应用拆成一堆小应用,每个都负责一部分功能,这就是微服务。这样做的好处是显而易见的,更新快,容错性强,每个服务可以独立部署,挺美的对吧?但是,问题也随之而…...

第三节 zookeeper基础应用与实战2
目录 1. Watch事件监听 1.1 一次性监听方式:Watcher 1.2 Curator事件监听机制 2. 事务&异步操作演示 2.1 事务演示 2.2 异步操作 3. Zookeeper权限控制 3.1 zk权限控制介绍 3.2 Scheme 权限模式 3.3 ID 授权对象 3.4 Permission权限类型 3.5 在控制台…...

C# Socket通信从入门到精通(21)——Tcp客户端判断与服务器断开连接的三种方法以及C#代码实现
前言 我们开发的tcp客户端程序在连接服务器以后,经常会遇到服务器已经关闭但是作为客户端的我们不知道,这时候应该应该有一个机制我们可以实时监测客户端和服务器已经断开连接,如果已经断开了连接,我们应该及时报警提示用户客户端和服务器已经断开连接,本文介绍三种可以监…...

vulnhub-->hacksudo-Thor靶机详细思路
目录 1. IP探测2.端口服务扫描3.网站漏洞扫描4.目录扫描5.信息分析6.破壳漏洞(Shellshock)nmap---漏洞检测CVE-2014-6271 7.nc反弹8.提权9.service提权 1. IP探测 ┌──(root㉿kali)-[~] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:10:3c:9b, IPv4: 19…...

Java外卖小程序管理系统
技术架构: springboot ssm mysql redis 有需要该项目的小伙伴可以私信我你的Q。 功能描述: 商品管理:新增商品、所有商品 菜单管理:菜单管理、菜单分类 订单管理:订单总览(包括未付款、已付款、已…...
挖掘嵌入式系统在物联网和智能设备中的应用潜力
1. 物联网的发展和嵌入式系统 介绍物联网的定义和特点,以及其在各个领域中的应用。探讨物联网对嵌入式系统的需求,包括低功耗、小型化、实时性等特性,以及对嵌入式系统的数据处理和通信能力的要求。 2. 嵌入式系统在智能设备中的应用 分析…...
用docker 配置scala spark环境
要使用Docker配置Scala和Spark环境,您可以按照以下步骤进行操作。以下是一个基本的示例,您可能需要根据您的具体需求进行调整。 安装Docker: 在您的系统上安装Docker。您可以从Docker官方网站下载并安装适用于您操作系统的版本。 创建Dockerfile: 在您的…...

医疗处方架构设计和实现的实战经验总结
医疗处方是医生开具给患者的药物治疗建议。在现代医疗系统中,设计和实现一个高效而可靠的医疗处方架构至关重要。本文将介绍医疗处方架构的设计原则和关键组件,以及如何实现一个可扩展和安全的处方管理系统。 内容: 1. 引言 - 医疗处方的…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...