项目结构
- java文件夹下:业务逻辑
- AndroidManifest.xml:项目配置文件
- res/layout文件夹下:页面布局
- res/values文件夹下:全局常量
- res/drawable文件夹下:图片资源
- res/mipmap系列:不同分辨率的图片资源,根据屏幕大小使用不同规格的图片,一般放APP图标
单位
单位 |
说明 |
dp |
device independent pixels(设备独立像素),不同设备有不同的显示效果,推荐使用这个 |
sp |
scaled pixels(放大像素),字体大小一般用这个 |
px |
pixels(像素) |
pt |
point,1pt = 1/72 英寸 |
View 和 ViewGroup
- 页面上的一个UI组件就是一个View,如
<TextView>
、<Button>
等
- ViewGroup是一组View的布局方式,如
<LinearLayout>
、<RelativeLayout>
等
四大组件
- Activity :
- Service :
- BroadcastReceiver :允许你的应用接收来自各处的广播消息,比如电话、短信等,当然,你的应用也可以向外发出广播消息
- ContentProvider :为应用程序之间共享数据提供了可能,比如你想要读取系统通讯录中的联系人,就需要通过ContentProvider来实现
六大基本布局
- 线性布局 LinearLayout :View按水平或竖直排列
- 相对布局 RelativeLayout :使用margin和padding相对父容器布局
- 表格布局 TableLayout :
<TableLayout>
内使用<TableRow>
定义一行,<TableRow>
中几个元素就是几列
- 帧布局 FrameLayout :即叠层布局。帧布局的大小由控件中最大的子控件决定
- 绝对布局 AbsoluteLayout :已弃用,建议改用 ConstraintLayout
- 网格布局 GridLayout :将视图按格子排列
线性布局 LinearLayout
xml参数 |
取值 |
说明 |
layout_width |
“match_parent”、”wrap_content” |
线性布局的宽度 |
layout_height |
“match_parent”、”wrap_content” |
线性布局的高度 |
orientation |
“vertical”、”horizontal” |
内部视图排序方向 |
divider |
一个视图View |
内部每两个相邻视图之间都有一个View |
LinearLayout 内视图参数
xml参数 |
取值 |
说明 |
layout_width |
“match_parent”、”wrap_content” |
线性布局的宽度 |
layout_height |
“match_parent”、”wrap_content” |
线性布局的高度 |
layout_weight |
1、2、3、…… |
该视图占整个线性布局大小的权重,使用该参数时注意 layout_width 与 layout_height 要有一个为 “wrap_content” |
约束布局 ConstraintLayout
xml参数 |
取值 |
说明 |
layout_width |
“match_parent”、”wrap_content” |
约束布局的宽度 |
layout_height |
“match_parent”、”wrap_content” |
约束布局的高度 |
ConstraintLayout 内视图参数
xml参数 |
取值 |
说明 |
layout_constraintTop_toTopOf |
parent、id |
子视图的顶部与其他视图的顶部对齐 |
layout_constraintLeft_toRightOf |
parent、id |
子视图的左部与其他视图的右部对齐 |
layout_constraintHorizontal_bias |
[0, 1] |
该值越大子视图越往右,0.5时居中,bias = 子视图左部到父视图左部的距离 / 子视图左部到父视图左部的距离 + 子视图右部到父视图右部的距离 |
网格布局 GridLayout
xml参数 |
取值 |
说明 |
rowCount |
1、2、3、…… |
共有几行 |
columnCount |
1、2、3、…… |
共有几列 |
orientation |
“horizontal”、”vertical” |
内部视图排序方向 |
GridLayout 内视图参数
xml参数 |
取值 |
说明 |
layout_rowSpan |
1、2、3、…… |
该视图横跨几列 |
layout_columnSpan |
1、2、3、…… |
该视图竖跨几行 |
layout_gravity |
“fill”、…… |
有使用以上两参数,则该参数为”fill” |
表格布局 TableLayout
xml参数 |
取值 |
说明 |
stretchColumns |
0、1、2、…… |
被拉伸的列序号 |
hint |
任意字符串 |
输入框为空时的提示词,无该参数会报错 |
Log
Android中的日志工具类是Log(android.util.Log),这个类中提供了如下5个方法来供我们打印日志(级别从低到高)。
- Log.v()。级别
verbose
,用于打印那些最为琐碎的、意义最小的日志信息
- Log.d()。级别
debug
,用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的
- Log.i()。级别
info
,用于打印一些比较重要的数据,这些数据应该是你非常想看到的、可以帮你分析用户行为的数据
- Log.w()。级别
warn
,用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方
- Log.e()。级别
error
,用于打印程序中的错误信息,一般代表你的程序出现严重问题了,必须尽快修复
TextView
xml参数 |
取值 |
说明 |
textStyle |
bold、italic等 |
字体样式,如加粗、斜体等 |
shadowRadius |
浮点数 |
阴影模糊程度 |
singleLine |
true、false |
文本单行显示 |
ellipsize |
end等 |
文本超出范围的省略方式 |
EditText
xml参数 |
取值 |
说明 |
inputType |
text、number等 |
指明输入内容的类型以弹出对应键盘 |
hint |
任意字符串 |
输入框为空时的提示词,无该参数会报错 |
drawableXXX |
Vector |
在输入框的指定方位添加icon或图片 |
hint |
任意字符串 |
输入框为空时的提示词,无该参数会报错 |
kotlin方法 |
返回值 |
说明 |
getText |
|
返回输入框中的内容 |
xml参数 |
取值 |
说明 |
onClick |
字符串,为点击后要执行的方法名 |
点击按钮后会调用对应的方法,与 setOnClickListener 相同 |
background |
selector |
按钮背景图片 |
backgroundTint |
selector |
按钮背景图片颜色 |
textAllCaps |
布尔值 |
当为true时按钮的文字会全部变成大写 |
ListView
详见我的另一篇文章:Android中的ListView
RecyclerView
详见我的另一篇文章:Android中的ListView
ShapeableImageView
详见我的另一篇文章:Android中的ShapeableImageView
使用阿里巴巴图标库
首先在阿里巴巴图标库下载svg图标,保存位置任意:

drawable文件夹右键创建 Vector Asset:

如图选择 Local file,选择svg文件的路径:

报错:No speakable text present
程序期望有一些可以被说出来的文本,用于无障碍朗读模式之类的,但是在提供的数据中并没有找到可以被转化为语音的文本。
解决方法:tools:ignore="SpeakableTextPresentCheck"
CLEARTEXT communication to xx.xx.xx.xx not permitted by network security policy
参考文章
出于安全性考虑,Android 9.0 后默认只支持HTTPS而不允许使用HTTP,要使用HTTP需要在AndroidManifest.xml
中<application>
内添加android:usesCleartextTraffic="true"
参观我的个人网站:http://saoke.fun