Android开发
写在前面:Android最开始使用XML和java语言开发,XML用来绘制app页面元素,java用来添加时间和动作,这点很像HTML和Javasrcipt
安装环境遇到的问题
gradle同步失败
Gradle 是一个开源的自动化构建工具,它能够支持多种编程语言和平台。Gradle 使用一种基于 Groovy 或 Kotlin 的领域特定语言(DSL)来声明项目设置,从而使构建过程更加灵活和可配置。它被广泛用于 Java、Kotlin 和 Android 等项目的构建管理。Gradle 能够管理项目的依赖、编译过程、打包和发布等多个阶段,提供了高效和灵活的构建机制。此外,Gradle 通过其强大的插件系统支持各种外部工具和框架的集成,使得开发者可以根据需要扩展构建过程
当配置文档时出现 【Android Studio】Gradle sync failed in xx s xxx ms;Connect timed out;Could not install Gradle dis 时,大概率是下载相应文件失败,需要改变 settings.gradle.kts 中的下载源
解决参考
Android Studio打开项目无法运行(run/Add Configuration)
大概率是配置文件没写好
解决参考
Andriod api和安卓版本对应关系
Android Studio 和文件作用
目录结构如下
该项目下面有两个分类:一个是app(代表app模块);另一个是Gradle Scripts。
其中,app下面又有3个子目录,其功能说明如下:
(1)manifests子日录,下面只有一个XML文件,即AndroidManifest.xml,它是App的运行配置文件,在里面可以更改软件图标和名字。
(2)java子日录,下面有3个com.example.myapp包,其中第一个包存放当前模块的java源代码,后面两个包存放测试用的java代码
(3)res子目录,存放当前模块的资源文件。res下面又有4个子目录:
- drawable目录存放图形描述文件与图片文件。
- layout目录存放App页面的布局文件。
- mipmap目录存放App的启动图标。
- values日录存放一些常量定义文件,例如字符串常量strings.xml、像素常量dimens.xml、颜色常量colors.xm)、样式风格定义
styles.xml等。
Gradle Scripts下面主要是工程的编译配置文件,主要有:
(1)build.gradle,该文件分为项目级与模块级两种,用于描述App工程的编译规则。
(2)proguard-rules.pro,该文件用于描述java代码的混淆规则。
(3)gradle.properties,该文件用于配置编译工程的命令行参数,一般无须改动。
(4)settings.gradle,该文件配置了需要编译哪些模块。初始内容为include’:app’,表示只编译app模块。
(5)local.properties,项目的本地配置文件,它在工程编译时自动生成,用于描述开发者电脑的环境配置,包括SDK的本地路径、NDK的本地路径等。
MainActivity
MainActivity 在 Android 开发中通常作为应用程序的入口点。它是一个 Activity 类的扩展,负责创建和显示应用程序的用户界面。在 Android 应用中,Activity 代表了一个单独的屏幕,包含用户可以与之交互的元素。MainActivity 通常是用户启动应用时看到的第一个屏幕
,因此它承担了初始化视图、数据绑定、处理用户输入等任务。具体到 MainActivity 的角色和功能,可以总结如下:
-
初始化界面:通过 setContentView 方法加载布局文件,建立用户界面。
-
处理用户交互:监听用户的动作(如点击、滑动等),并对这些动作做出响应。
-
生命周期管理:管理应用的生命周期事件(如创建、暂停、恢复、销毁等),确保应用在不同状态下正确运行。
-
资源管理:加载和使用资源(如字符串、图片等),并根据需要调整资源(如切换主题),初始化一个类
R
(res),R 是一个自动生成的类,用于提供对资源的引用,如布局(layout)、字符串(strings)、颜色(colors)和其他静态资源。这个类使得开发者可以在代码中通过ID访问这些资源,而不是通过硬编码的字符串或其他字面量。R 类位于你的应用包名下,例如 com.example.app.res,并且会随着项目中资源的增加自动更新,可以通过R调用res
中的变量来改变内容,如下所示setContentView(R.layout.activity_main); // modify show content in the screen TextView tv = findViewById(R.id.text_content); tv.setText("这是一个智能记账本");
其中
activity_main
中的内容如下<TextView android:id="@+id/text_content" android:text="Hello World!"
-
导航和布局:作为导航的起点,管理应用中的其他 Activity 或碎片(Fragment),以及实现复杂的用户界面布局。
-
适配不同设备:处理不同设备和屏幕尺寸的适配问题,确保用户界面在各种设备上都能正确显示,具体做法是继承官方提供的类
public class MainActivity extends AppCompatActivity
创建一个页面
逐步创建
步骤如下:
(1)在 layout 目录下创建 XML 文件,即新activity的布局文件
(2)创建与 XML 文件对应的 Java 代码,在java包下新建一个java文件对应新的Activity
(3)在 AndroidManifest.xml 中注册页面配置,填写这样的代码
<activity
android:name=".click_example"
android:exported="false" />
用Android Studio快捷创建
在java
下的软件包里新建Activity
,可以自动生成面三个步骤
页面布局
前提知识
生活中常说的手机或者显示屏有多少尺寸,单位为英尺,1英尺=2.54厘米,如果说一块显示屏的尺寸为28寸,其实是屏幕对角尺寸为28寸,即28×2.54=71.12厘米
关于像素密度dpi(Dots Per Inch),可以理解为:在一英寸的屏幕上,有多少像素。鼠标dpi400,就是指我在桌上挪动一英寸,鼠标要在屏幕上走400个像素
重点在于dp(dip,Device Independent Pixle),dp有时也写作dip,指的是与设备无关的显示单位,它只与屏幕的尺寸有关,所有显示到屏幕上的图像都是以 px 为单位,Dp 是我们开发中使用的长度单位,最后他也需要转换成 px,计算这个设备上 1dp 等于多少 px:px = dp x dpi /160,例如320 x 480分辨率,3.6寸的手机:dpi为160,1dp=1px,有如下关系
关于sp,sp的原理跟dp差不多,但它专门用来设置字体大小。手机在系统设置里可以调整字体的大小(小、标准、大、超大)。设置普通字体时,同数值dp和sp的文字看起来一样大;如果设置为大字体,用dp设置的文字没有变化,用sp设置的文字就跟随系统字体字号变大了。一般而言,文本字体用sp,元素之间的布局用dp,因为sp会随系统字号的改变而改变,而dp不会。
为文本上色
- 在XML文件中则通过属性android:textColor指定文本颜色,色值由透明度alpha和RGB三原色联合定义。
- 色值有八位十六进制数与六位十六进制数两种表达方式,例如八位编码FFEEDDCC中,FF表示透明度,EE表示红色的浓度,DD表示绿色的浓度,CC表示蓝色的浓度。
- 透明度为FF表示完全不透明,为00表示完全透明。RGB三色的数值越大,表示颜色越浓,也就越亮;数值越小,表示颜色越淡,也就越暗
可以在XML文件中设置这些颜色,也可以在Java文件中用set方法设置
android:text="Hello World!"
android:textSize="30sp"
android:textColor="@color/magenta"
android:background="@color/black"
设置文本宽度和高度
视图宽度通过属性android:layout_width表达,视图高度通过属性android:layout_heig
ht表达,宽高的取值主要有下列三种:
- match_parent:表示与上级视图保持一致。如果内容不够上级宽度,则填补空白,如果超出,则省略超出的部分或换到下一行
- wrap_content:表示与内容自适应。
- 以dp为单位的具体尺寸。
android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_width="300dp"
设置视图的间距
设置视图的间距有两种方式:
- 采用
layout_margin
属性,它指定了当前视图与周围平级视图之间的距离。包括layout_margin、layout_marginLeft、layout_marginTop、layout_marginRight、layout_marginBottom - 采用
padding
属性,它指定了当前视图与内部下级视图之间的距离。包括padding、paddingLeft、paddingTop、paddingRight、paddingBottom
下面是一个示例,最外的线性布局为背景为蓝色,当只指定了layout_margin
或者padding
时,默认四周都是该值。线性布局可以内置线性布局,要指定线性布局的方向(orientation)是垂直(vertical)还是水平(horizental)的,View内不可嵌套别的布局。
设置视图对齐
设置视图的对齐方式有两种途径:
- 采用
layout_gravity
属性,它指定了当前视图相对于上级视图的对齐方式。 - 采用
gravity
属性,它指定了下级视图相对于当前视图的对齐方式。
layout_gravity与gravity的取值包括:left、top、right、bottom,还可以用竖线连接各
取值,例如“left|top”表示即靠左又靠上,也就是朝左上角对齐。
总结 : 当需要统一对子元素进行设置(如都在中央或都与父元素有间距)时,可以用padding 和 gravity,其余情况一般都是设置子元素对于父元素的相对位置,用layout_margin 和 layout_gravity
线性布局的权重
线性布局的权重概念,指的是线性布局的下级视图各自拥有多大比例的宽高。
权重属性名叫layout_weight
,但该属性不在LinearLayout节点设置,而在线性布局的直接下级视图设置,表示该下级视图占据的宽高比例。
- layout_width填0dp时,layout_weight表示水平方向的宽度比例。
- layout_height填0dp时,layout_weight表示垂直方向的高度比例。
网格布局GridLayout
网格布局支持多行多列的表格排列,与LinearLayout同级。
网格布局默认从左往右、从上到下排列,它新增了两个属性:
columnCount
属性,它指定了网格的列数,即每行能放多少个视图;rowCount
属性,它指定了网格的行数,即每列能放多少个视图
滚动视图ScrollView
滚动视图有两种:
ScrollView
,它是垂直方向的滚动视图;垂直方向滚动时,layout_width属性值设置为match_parent,layout_height属性值设置为wrap_content。HorizontalScrollView
,它是水平方向的滚动视图;水平方向滚动时,layout_width属性值设置为wrap_content,layout_height属性值设置为match_parent。
ScrollView 内置 多个LinearLayout的滚动