基于Android Studio的APP开发学习笔记(一)

由于以前的电脑太卡了导致这学期选的Android开发课都没怎么听过,刚换了电脑赶紧补补嘤嘤嘤

前言

Android系统是基于Linux的智能操作系统

Android分为5个层,从高到低:

  • 应用程序层
  • 应用程序框架层
  • 系统运行库层
  • 运行环境层
  • Linux核心层

安装

直接去官网下载安装,安装时挂代理,方便下载JDK等包

https://blog.csdn.net/sacredness/article/details/82929768

Hello World

安装完成,点击新建项目,选择Empty Activity,然后命名、选择language为java,选择SDK(java软件开发工具包)最低版本

AVD,Android Virtual Device,用来调试和运行Android项目;又称Android模拟器;点击下图所示箭头安装

之后运行虚拟机,点击Run按钮,小手机显示:

目录结构分析

如下图所示,Android Studio提供了以下几种目录结构类型:

常用的是Project和Android结构;其中Project目录比较全面,Android结构隐藏掉了一些平常开发不经常使用的文件

以下是Android目录结构及其说明:

  • manifests:项目的系统配置目录

  • java:源代码目录

  • res:资源目录

    • drawable:主要存放一些用户自定义形状和背景选择器

    • layout:存放界面布局文件

    • mipmap:包含一些应用程序可以用的原生图标文件。把图片放到该目录下可以提高系统渲染图片的速度,提高图片质量,减轻CPU压力

    • values:存放资源描述文件,包含颜色、字符串和样式等

  • Gradle Scripts:存放项目自动化构建脚本

文件分析

以下路径使用的是Android目录结构

资源文件app/res/values/

1.colors.xml

该文件定义了颜色常量,其默认内容为:

1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#6200EE</color>
<color name="colorPrimaryDark">#3700B3</color>
<color name="colorAccent">#03DAC5</color>
</resources>

<color>为定义颜色资源的标签,name为颜色资源名称,颜色值以#开头,数据形式为16进制;这里用的RGB格式,即每两位16进制数分别对应red、green、blue

2.strings.xml

该文件定义和存储项目中的字符串资源:

1
2
3
<resources>
<string name="app_name">My Application</string>
</resources>

这里的My Application就是应用左上角显示的字符串,可参考上面Hello World部分的那张图

3.styles.xml

定义主题之类的,暂时不理解

1
2
3
4
5
6
7
8
9
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>

在资源中对另一种资源引用时,一般引用格式为@type/name@表示对资源的引用,type表示被引用资源类型,name表示资源名称;这里便是引用的colors.xml中定义的三个颜色常量

另外,如果是没有在R文件中注册的资源,引用格式为@+type/name

界面布局文件app/res/layout/

activity_main.xml

默认内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

本界面采用的ConstraintLayout约束布局

布局标签下还包括一个<TextView>的标签,说明在布局中添加了一个文本控件用于显示Hello World!

代码文件app/java/

查看MainActivity.java文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

定义的类重写了onCreate方法,调用了setContentView()方法加载activity_main.xml布局文件

其中,R.layout.activity_mainR表示R.java文件

R.java文件

项目中的所有资源都有一个唯一的ID标识,而且必须在该文件中注册

双击shift搜索该文件,发现该文件中定义了一堆静态类,每个静态类分别对应着一种资源,例如layout静态内部类对应layout目录

引用格式:R.resource_type.resource_name,其中resource_name不用带后缀名

AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

<manifest>定义了manifest是AndroidManifest.xml的根元素;默认情况,该节点声明了xmlns:androidpackage两个属性,xmlns:android定义了Android的命名空间,这样使得Android中各种标准属性能在文件中使用;属性package定义了应用程序的包名称

mainfest标签仅能包含一个application元素;application属性为:

  • android:allowBackup="true":设置允许备份文件
  • android:icon="@mipmap/ic_launcher":定义了应用程序的图标
  • android:supportsRtl="true":设置应用程序可以支持RTL布局
  • android:theme="@style/AppTheme":设置应用程序主题是AppTheme

activity元素是对Activity组件的声明;属性android:name定义了该Activity的名称,该名称可以是包含着包名的完整的类名,也可以省略包名

activity标签下可以定义0个或多个<intent-filter>标签,用于设定Intent过滤条件,可以与其他组件通信,该标签下的:

1
2
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />

用于声明本Activity是应用程序启动后首先被执行的Activity;即Android程序的入口点;确定了主Activity之后,启动Android应用时,先启动该Activity,并执行它的onCreate()方法

简单练习

输入框输入信息,点击按钮显示到文本框中

首先打开activity_main.xml,选择右上角的Design,切换到图形化界面,这样便可直观的选择控件,并可将其拖到屏幕上;右侧显示了控件的一些属性信息,我们可以自己设置个id名,之后在java