Android 学习小记1

news2025/1/2 21:34:36

目录

先介绍一下Android Studio

看看常见的模板

1. No Activity

2. Empty Activity

3. Gemini API Starter

4. Basic View Activity

5. Bottom Navigation Activity

6. Empty Views Activity

7. Navigation Drawer Views Activity

8. Responsive Views Activity

9. Game Activity C++

10. Native C++

开始我们的第一个项目

manifests文件夹

java文件夹


笔者最近摸鱼Android,但是国内不少的资料实在是过时,这里笔者打算记录一下从2024年12.29开始的Android学习的旅程。

先介绍一下Android Studio

Android Studio 是用于 Android 应用程序开发的官方 IDE(集成开发环境),它基于 JetBrains 的 IntelliJ IDEA 软件。Android Studio 提供了许多出色的功能,可提高构建 Android 应用程序的效率,例如:

  • 灵活的基于 Gradle 的构建系统

  • 快速且功能丰富的模拟器

  • 混合环境,可在其中为所有 Android 设备进行开发

  • 应用更改以将代码和资源更改推送到正在运行的应用程序,而无需重新启动应用程序

  • GitHub 和代码模板集成可帮助您开发常见的应用程序功能并导入示例代码

  • 广泛的测试工具和框架

  • C++ 和 NDK 支持

内置对 Google Cloud Platform 的支持,可轻松集成 Google Cloud Messaging 和 App Engine 等。通常,当开发人员想要在 Android Studio 中创建新项目时,他/她需要选择一个项目模板,该模板由许多Activity组成

看看常见的模板

他们分别是:

  • No Activity

  • Empty Activity

  • Gemini API Starter

  • Basic View Activity

  • Bottom Navigation Activity

  • Empty Views Activity

  • Navigation Drawer Views Activity

  • Responsive Views Activity

  • Game Activity C++

  • Native C++

1. No Activity

这些则是有经验的开发者选择的架构,一般而言没有XML,也不会有任何一个Java或者是Kotlin文件,那些文件是不会自动生成的。

  • 用途:创建一个空的Android项目,不包含任何活动或UI布局。适用于那些需要完全自定义应用结构的开发者。

  • 特点:无预定义界面或元素,开发者可以从零开始构建应用的任何部分。你需要手动添加所有的活动、布局和资源文件。

  • 适用场景:适合有经验的开发者,他们已经知道自己需要什么样的架构和功能,不依赖Android Studio提供的默认模板。

2. Empty Activity

这个是大部分初学者最经常选择的架构。

  • 用途:创建一个包含一个简单活动(Activity)和一个默认布局的基础模板。这个模板为你提供了一个简单的起点,开发者可以快速开始构建应用。

  • 特点:包含一个MainActivity和一个简单的布局文件(如activity_main.xml)。它是开发中最常用的模板之一,适合那些需要快速实现一些基本功能的开发者。

  • 适用场景:适用于初学者或那些想要实现简单应用的开发者,它为开发者提供了一个干净的基础,不包含过多复杂的功能。

3. Gemini API Starter

  • 特点:包含Gemini API的基本集成代码和接口调用结构。它为开发者提供了一个与Gemini API交互的框架,简化了API调用和数据解析过程。

  • 适用场景:适用于需要使用Gemini API的开发者,如星座应用、占星应用或任何其他基于Gemini API服务的应用。

4. Basic View Activity
  • 用途:这个模板为应用提供一个简单的UI,展示基本的视图元素,如文本框、按钮、图片等。适用于需要快速展示UI的应用。

  • 特点:它的布局文件通常包含一些基础视图组件(例如TextViewButtonImageView等)。该模板重点展示如何将常见的UI元素放入活动中,简化视图的展示过程。

  • 适用场景:适用于开发简单的界面,展示静态内容或进行简单的交互操作。

5. Bottom Navigation Activity

底部导航活动会创建一个带有底部导航的新活动。我们都遇到过包含底部导航栏的应用程序。一些流行的例子包括 Instagram、WhatsApp 等。当您选择底部导航活动时,会自动创建这些文件,以下是欢迎页面:

  • 用途:为开发者提供了底部导航栏的UI设计,允许在应用的不同部分之间进行快速切换。通常适用于拥有多个页面的应用。

  • 特点:该模板内置了底部导航栏(BottomNavigationView),用户可以点击不同的菜单项来切换不同的Fragments或活动页面。适用于需要底部导航布局的应用。

  • 适用场景:适合包含多个功能模块的应用(如社交、购物或新闻应用),用户可以通过底部导航在不同的模块之间切换。

6. Empty Views Activity

这是一个很受欢迎的活动,我们在开始开发 Android 项目时经常选择此活动。它只是创建一个新的空活动。注意:请在无活动和空活动中标记阶段。在无活动中,它会创建一个新的空项目,在空活动中,它会创建一个新的空活动。

  • 用途:类似于“Empty Activity”,但该模板关注于提供一个空的视图框架,允许开发者自己逐步构建布局和UI组件。

  • 特点:模板创建后,除了Activity外不会提供任何UI元素,开发者需要手动向布局中添加View元素,如TextViewButtonRecyclerView等。它是一个完全自定义的空白视图布局。

  • 适用场景:适用于那些需要完全控制UI元素布局的开发者,或者需要创建非常个性化的界面的应用。

7. Navigation Drawer Views Activity
  • 用途:提供一个包含侧边栏(Navigation Drawer)的UI模板,适用于需要复杂菜单导航的应用。

  • 特点:该模板包括一个滑动的侧边菜单(NavigationView),用户可以通过滑动或点击菜单按钮打开该侧边栏,菜单通常包含多个选项,帮助用户在不同的界面或功能间切换。

  • 适用场景:适用于多模块的应用,尤其是需要有多个页面或功能项的应用(例如设置页面、个人中心等)。常用于社交、新闻和管理类应用。

8. Responsive Views Activity
  • 用途:该模板旨在帮助开发者创建响应式布局,确保应用在不同屏幕尺寸和设备类型(如手机、平板)上均能良好显示。

  • 特点:模板内置了一些响应式布局元素,如ConstraintLayout,并适配了不同屏幕尺寸的视图。它可能还包含drawablevalues文件夹中的资源,以便于在不同设备和分辨率下展示不同的UI效果。

  • 适用场景:适合开发需要跨多个设备和屏幕尺寸的应用,尤其是那些需要高度适配的应用(如平板和手机通用的应用)。

9. Game Activity C++
  • 用途:这是为游戏开发者准备的C++基础活动模板,适用于使用C++编写游戏的Android应用。

  • 特点:该模板包括C++代码支持,提供一个简易的框架来运行游戏逻辑。它可能集成了一些常见的游戏开发工具和库(如OpenGL、Cocos2d等),以便于快速启动游戏项目。

  • 适用场景:适用于使用C++进行Android游戏开发的开发者,尤其是那些有经验并希望在移动设备上开发高性能游戏的开发者。

10. Native C++

原生 C++ 会创建一个新项目,其中的空活动配置为使用 JNI。JNI 是 Java 原生接口。JNI 描述了 Android 从用 Java 或 Kotlin 编程语言编写的执行代码编译字节码与用 C/C++ 编写的原生代码交互的方式。JNI 与供应商无关,支持从动态共享库加载代码,虽然有时很麻烦,但效率很高。

  • 用途:这是一个基础的原生C++模板,专为需要直接使用C++编写Android应用的开发者设计。与Java/Kotlin不同,这种模板使用C++直接与底层硬件和操作系统交互。

  • 特点:开发者可以在此模板中使用C++与Java/Kotlin进行交互,或者完全使用C++实现应用逻辑。通常与JNI(Java Native Interface)或NDK(Native Development Kit)一起使用。

  • 适用场景:适用于需要处理大量计算或性能要求较高的应用(如游戏、图像处理应用等),开发者熟悉C++并希望直接在Android平台上运行原生代码。

开始我们的第一个项目

可以看看下面,这是我们的工程项目,一般而言,这个是默认的视图。不太方便而且眼花缭乱,所以我们需要更改一下视图:

在这里,选择跟我一样的Android

就会得到一个非常干净的:

展开了来看就是这样的

梳理一下:

manifests 文件夹
kotlin+java文件夹
res(资源)文件夹
    Drawable 文件夹
    Mipmap 文件夹
    Values 文件夹
    XML文件夹
Gradle 脚本

manifests文件夹

清单文件夹包含用于创建 android 应用程序的 AndroidManifest.xml。此文件包含有关我们应用程序的信息,例如 Android 版本、元数据、Kotlin 文件的状态包和其他应用程序组件。它充当 android 操作系统和我们的应用程序之间的中介。

<?xml version="1.0" encoding="utf-8"?>  <!-- XML 声明,表明使用 UTF-8 编码 -->
​
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  <!-- Android 命名空间 -->
    xmlns:tools="http://schemas.android.com/tools">  <!-- 工具命名空间,用于辅助工具相关配置 -->
​
    <!-- 应用程序的基本配置 -->
    <application
        android:allowBackup="true"  <!-- 是否允许备份应用数据,true 表示允许 -->
        android:dataExtractionRules="@xml/data_extraction_rules"  <!-- 数据提取规则,指定 XML 文件用于数据恢复和备份 -->
        android:fullBackupContent="@xml/backup_rules"  <!-- 完整备份内容的规则,指定应用数据的备份规则 -->
        android:icon="@mipmap/ic_launcher"  <!-- 应用图标,引用 mipmap 文件夹中的 ic_launcher 图标 -->
        android:label="@string/app_name"  <!-- 应用名称,引用 strings.xml 中的 app_name 字符串资源 -->
        android:roundIcon="@mipmap/ic_launcher_round"  <!-- 圆形图标,通常在支持圆形图标的设备上使用 -->
        android:supportsRtl="true"  <!-- 表示应用支持从右向左的布局,适用于阿拉伯语等语言 -->
        android:theme="@style/Theme.DemoOfMyFirstApplication"  <!-- 应用主题,引用 styles.xml 中的 Theme.DemoOfMyFirstApplication 样式 -->
        tools:targetApi="31">  <!-- 工具标记的目标 API 级别为 31(Android 12) -->
        
        <!-- 定义应用程序的活动(Activity) -->
        <activity
            android:name=".MainActivity"  <!-- 活动的类名,指定主活动为 MainActivity -->
            android:exported="true"  <!-- 活动是否可以由外部组件启动,true 表示可以外部访问 -->
            android:label="@string/app_name"  <!-- 活动的标签,通常是活动的标题,引用 strings.xml 中的 app_name 字符串资源 -->
            android:theme="@style/Theme.DemoOfMyFirstApplication">  <!-- 活动使用的主题,指定与应用相同的主题 -->
            
            <!-- 活动的意图过滤器,用于定义该活动响应的 Intent 类型 -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />  <!-- MAIN 动作,表示此活动是应用的主活动 -->
                <category android:name="android.intent.category.LAUNCHER" />  <!-- LAUNCHER 类别,表示该活动是应用的启动活动 -->
            </intent-filter>
        </activity>
​
    </application>
​
</manifest>
​

java文件夹

java文件夹包含我们在应用开发过程中创建的所有 java 和 Kotlin 源代码 (.java) 文件,包括其他测试文件。如果我们使用 Kotlin 创建任何新项目,默认情况下,类文件 MainActivity.kt 文件将在软件包名称“com.example.demoofmyfirstapplication”下自动创建,如下所示。

package com.example.demoofmyfirstapplication  // 包名,定义了当前文件所在的包
​
// 导入必要的库和组件
import android.os.Bundle  // Bundle 类,用于传递和保存活动的状态
import androidx.activity.ComponentActivity  // 导入 ComponentActivity 类,它是 Activity 类的子类,支持 Jetpack Compose
import androidx.activity.compose.setContent  // 用于设置 Compose UI 内容
import androidx.activity.enableEdgeToEdge  // 用于启用 "Edge-to-Edge"(边缘到边缘)布局,适用于沉浸式屏幕
import androidx.compose.foundation.layout.fillMaxSize  // 用于设置视图填充最大可用空间
import androidx.compose.foundation.layout.padding  // 用于设置视图的内边距
import androidx.compose.material3.Scaffold  // Scaffold 组件,用于实现常见的 Material Design 布局结构
import androidx.compose.material3.Text  // 用于显示文本组件
import androidx.compose.runtime.Composable  // 用于定义 Compose 可组合函数
import androidx.compose.ui.Modifier  // Modifier 用于修饰 Compose 组件的外观和行为
import androidx.compose.ui.tooling.preview.Preview  // 用于预览 Compose 布局
import com.example.demoofmyfirstapplication.ui.theme.DemoOfMyFirstApplicationTheme  // 导入自定义的主题
​
// MainActivity 类,继承自 ComponentActivity,是应用的主活动
class MainActivity : ComponentActivity() {
    
    // onCreate 方法是 Activity 生命周期的一个重要方法,首次创建活动时调用
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        // 启用 "Edge-to-Edge" 布局,消除系统 UI(如状态栏)的干扰,允许视图内容扩展到屏幕的边缘
        enableEdgeToEdge()
        
        // 使用 setContent 方法设置 Compose UI 内容
        setContent {
            // 使用应用的主题,确保 UI 按照预设的样式进行渲染
            DemoOfMyFirstApplicationTheme {
                
                // Scaffold 是一个常见的 Material Design 布局结构,通常包含顶部栏、底部栏等
                Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
                    
                    // 调用 Greeting 函数,在界面上显示问候语
                    // innerPadding 是 Scaffold 自动计算出的内边距,用来避免 UI 元素与屏幕边缘重叠
                    Greeting(
                        name = "Android",  // 传入一个字符串参数给 Greeting
                        modifier = Modifier.padding(innerPadding)  // 给 Greeting 添加内边距修饰符
                    )
                }
            }
        }
    }
}
​
// 定义一个 Composable 函数,接收一个 name 参数并显示一个问候语
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    // 使用 Text 组件显示文本,text 参数是显示的内容,modifier 用来修饰组件的外观
    Text(
        text = "Hello $name!",  // 显示的问候文本
        modifier = modifier  // 应用外部传入的修饰符
    )
}
​
// 用于预览 Composable 函数的布局和外观
@Preview(showBackground = true)  // 设置预览时显示背景
@Composable
fun GreetingPreview() {
    // 使用应用主题包装预览组件
    DemoOfMyFirstApplicationTheme {
        // 调用 Greeting 函数进行预览,传入 "Android" 作为参数
        Greeting("Android")
    }
}

资源 (res) 文件夹 资源文件夹是最重要的文件夹,因为它包含我们 Android 应用程序的所有非代码源,如图像、XML 布局和 UI 字符串。

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

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

相关文章

uniapp使用ucharts组件

1.ucharts准备 有两种使用方式&#xff1a;一种是在uni的插件市场下载&#xff08;组件化开发&#xff09;。一种是手动引入ucharts包。官方都封装好组件了&#xff0c;我们不用岂不是浪费。 直接去dcloud插件市场&#xff08;DCloud 插件市场&#xff09;找&#xff0c;第一…

mybatis-plus自动填充时间的配置类实现

mybatis-plus自动填充时间的配置类实现 在实际操作过程中&#xff0c;我们并不希望创建时间、修改时间这些来手动进行&#xff0c;而是希望通过自动化来完成&#xff0c;而mybatis-plus则也提供了自动填充功能来实现这一操作&#xff0c;接下来&#xff0c;就来了解一下mybatis…

一、Hadoop概述

文章目录 一、Hadoop是什么二、Hadoop发展历史三、Hadoop三大发行版本1. Apache Hadoop2. Cloudera Hadoop3. Hortonworks Hadoop 四、Hadoop优势1. 高可靠性2. 高扩展性3. 高效性4. 高容错性 五、Hadoop 组成1. Hadoop1.x、2.x、3.x区别2. HDFS 架构概述3. YARN 架构概述4. Ma…

深度学习笔记(9)——神经网络和反向传播

神经网络和反向传播 神经网络架构&#xff1a; 更多的神经元,更大的模型容量,使用更强的正则化进行约束。 神经网络的分层计算 f W 2 m a x ( 0 , W 1 x b 1 ) b 2 fW_2max(0,W_1xb_1)b_2 fW2​max(0,W1​xb1​)b2​,其中max函数体现了非线性,如果想要加深网络的层次,必须…

大模型辅助测试的正确打开方式?

测试的基本目的之一&#xff0c;是对被测对象进行质量评估。换言之&#xff0c;是要提供关于被测对象质量的“确定性”。因此&#xff0c;我们很忌讳在测试设计中引入“不确定性”&#xff0c;比如采用不可靠的测试工具、自动化测试代码逻辑复杂易错、测试选择假设过于主观等等…

ipad如何直连主机(Moonlight Sunshine)

Windows 被连接主机&#xff08;Windows&#xff09; 要使用的话需要固定ip&#xff0c;不然ip会换来换去&#xff0c;固定ip方法本人博客有记载Github下载Sunshine Sunshine下载地址除了安装路径需要改一下&#xff0c;其他一路点安装完成后会打开Sunshine的Web UI&#xff…

sentinel集成nacos启动报[check-update] get changed dataId error, code: 403错误排查及解决

整合nacos报403错误 因为平台写的一个限流代码逻辑有问题&#xff0c;所以准备使用sentinel来限流。平台依赖里面已经引入了&#xff0c;之前也测试过&#xff0c;把sentinel关于nacos的配置加上后&#xff0c;启动一直输出403错误 [fixed-10.0.20.188_8848-test] [check-upda…

紫光同创-盘古200pro+开发板

本原创文章由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处&#xff08;www.meyesemi.com) 一、开发系统介绍 开发系统概述 MES2L676-200HP 开发板采用紫光同创 logos2 系列 FPGA&#xff0c;型号&#xff1a;…

Vue开发环境搭建上篇:安装NVM和NPM(cpnm、pnpm)

文章目录 引言I 安装NVM1.1 Windows系统安装NVM,实现Node.js多版本管理1.2 配置下载镜像1.3 NVM常用操作命令II NPM永久使用淘宝源安装 cnpm安装pnpm【推荐】see also: vscode常用插件引言 淘宝镜像:http://npm.taobao.org 和 http://registry.npm.taobao.org 已在 2022.06.3…

【AI大模型】探索GPT模型的奥秘:引领自然语言处理的新纪元

目录 &#x1f354; GPT介绍 &#x1f354; GPT的架构 &#x1f354; GPT训练过程 3.1 无监督的预训练语言模型 3.2 有监督的下游任务fine-tunning &#x1f354; 小结 学习目标 了解什么是GPT.掌握GPT的架构.掌握GPT的预训练任务. &#x1f354; GPT介绍 GPT是OpenAI公…

正则表达式(三剑客之sed)

1.sed工具的使用 1.1 sed工具 1&#xff09;命令格式&#xff1a;sed -n ‘n’ p filename 1.2 打印某行 1&#xff09;打印第二行 [rootlocalhost ~]# sed -n 2p /etc/passwd 2&#xff09;第二行重复打印 [rootlocalhost ~]# sed 2p /etc/passwd 3&#xff09;所有行全部…

细说STM32F407单片机IIC总线基础知识

目录 一、 I2C总线结构 1、I2C总线的特点 2、I2C总线通信协议 3、 STM32F407的I2C接口 二、 I2C的HAL驱动程序 1、 I2C接口的初始化 2、阻塞式数据传输 &#xff08;1&#xff09;函数HAL_I2C_IsDeviceReady() &#xff08;2&#xff09;主设备发送和接收数据 &#…

Android笔试面试题AI答之Android基础(7)

Android入门请看《Android应用开发项目式教程》&#xff0c;视频、源码、答疑&#xff0c;手把手教 文章目录 1.Android开发如何提高App的兼容性&#xff1f;**1. 支持多版本 Android 系统****2. 适配不同屏幕尺寸和分辨率****3. 处理不同硬件配置****4. 适配不同语言和地区**…

《机器学习》线性回归模型实现

目录 一、一元线性回归模型 1、数据 2、代码 3、结果 二、多元线性回归模型 1、数据 2、代码 3、结果 一、一元线性回归模型 1、数据 2、代码 # 导入所需的库 import pandas as pd # 用于数据处理和分析 from matplotlib import pyplot as plt # 用于数据可视化 fr…

基于DIODES AP43781+PI3USB31531+PI3DPX1207C的USB-C PD Video 之全功能显示器连接端口方案

随着USB-C连接器和PD功能的出现&#xff0c;新一代USB-C PD PC显示器可以用作个人和专业PC工作环境的电源和数据集线器。 虽然USB-C PD显示器是唯一插入墙壁插座的交流电源输入设备&#xff0c;但它可以作为数据UFP&#xff08;上游接口&#xff09;连接到连接到TCD&#xff0…

QWidget应用封装为qt插件,供其他qt应用调用

在之前的文章中,有介绍通过QProcess的方式启动QWidget应用,然后将其窗口嵌入到其他的qt应用中,作为子窗口使用.这篇文章主要介绍qt插件的方式将QWidget应用的窗口封装为插件,然后作为其他Qt应用中的子窗口使用. 插件优点: 与主程序为同一个进程,免去了进程间繁琐的通信方式,…

关于 覆铜与导线之间间距较小需要增加间距 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/144776995 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

ArcGIS教程(009):ArcGIS制作校园3D展示图

文章目录 数据下载校园3D展示图制作创建要素类矢量化【楼】要素矢量化【绿地】矢量化【范围】矢量化处理打开ArcScene添加动画数据下载 https://download.csdn.net/download/WwLK123/90189025校园3D展示图制作 创建要素类 添加底图: 新建【文件地理数据库】,并修改名称为【…

权限注解+AOP切面+额外工具(UUID生成id,JWT,Servlet客户端,字符串String工具类,Redis序列化,ip工具类)

权限功能和注解的关系 ①、定义三个注解 //角色认证&#xff0c;必须具有指定角色标识才能进入该方法 Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD,ElementType.TYPE}) public interface RequiresRoles{//需要校验的角色标识String[] value() default {}…

RGB、HSV颜色模型及MATLAB互换应用实例

一、前言 RGB和HSV模型是数字图像处理中颜色空间中的两种重要表示方式&#xff0c;RGB和HSV都是描述颜色的数学模型&#xff0c;可以用于表示和处理图像中的颜色信息。 RGB模型是一种基于光的颜色模型&#xff0c;由红&#xff08;Red&#xff09;、绿&#xff08;Green&#x…