安卓开发学习笔记
安卓开发基础知识篇
Android绪论
-
Android简介
- Android
- 操作系统、中间件、核心应用
- 各种手机厂商的操作系统基于Android
- 主流语言:Kotlin、Java
- IOS
- 开发语言:Objective-C、swift
- Android
-
Android系统架构
- Application(第一层)
- Application Framework(第二层)
- Libraries | Android Runtime(第三层)
- Linux Kernel(第四层)
-
Android应用领域
- 设备:智能手机、平板、智能电视
- Android Wear
-
Android环境搭建
- Android Studio
- JDK
- SDK:软件开发工具包
- Android Studio
第一个安卓程序
〇、内容大纲
- 创建安卓应用程序
- 安卓项目结构
- 使用安卓模拟器
- 运行安卓应用
- HelloWorld扩展
一、创建安卓应用程序
-
Project与Module
- Project——项目
- Module——模块
- 一个Project包括很多Module
-
创建界面
- Application Name不是项目名称,而是这个应用的名字。
- 输入域名自动生成包名,包名不能输入中文。
-
Activity
- 根据需要选择一些模板
-
在手机模拟器端可以看到预览效果,并且显示文字
“Hello World!”
。-
我们并没有输入文字,这是怎么出现的呢?
-
当我们在创建项目的时候会默认生成一个XML布局文件
activity_main.xml
。这个XML文件存放在
res\layout
下。这个XML文件默认添加一段代码:
<Textview android:layout_width="match_parent" android:layout_heizht="wrap_content" android:text="Helle werld!" android:id="@+id/textview" />
-
二、安卓项目结构
-
一些图标的讲解
-
安卓图标,显示安卓开发中常用的工程文件(建议使用的结构)
-
项目图标,显示整个项目中的所有工程文件
-
–下列以安卓结构为例分析各个节点的含义–
-
manifests
,第一个节点,显示安卓的全局描述文件
-
java
,第二个节点,显示java的源代码文件
-
res
,第三个节点,显示一些资源文件
常用的布局文件,一些图片资源文件等等
-
Gradle Scripts
节点,与安卓应用源代码没有关系
-
-
manifests
节点-
一般只存在一个XML全局描述文件
-
AndroidManifest.xml
XML文件内容<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myfirstapplication"> <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/Theme.MyFirstApplication"> <activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name" android:theme="@style/Theme.MyFirstApplication.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
-
AndroidManifest.xml
XML文件内容解释前三行自动生成,可以不用管。
application
标签,用来配置整个应用的属性。在
application
标签包含一些activity
标签,用来配置项目中所应用的activity
。一般情况下只默认创建一个
MainActivity
。intent-filter
标签用来将所在activity
配置为应用程序的入口。例如在如上xml描述中,当程序运行时,会从被
intent-filter
标记的MainActivity
进入。
-
-
java
节点- 主要用于显示安卓应用当中所有的包和安卓源文件。
onCreate
方法很重要。- 很重要的一个不可以修改的
R
文件,通过索引引用这个资源。 - 当我们创建应用时,如果出现了生成
R
文件失败的情况,我们对项目进行清理就可以成功解决这个bug。
-
res
节点-
用来显示保存在该节点下的资源文件。
-
drawable
目录:一般用来放置图片文件。9 Patch 文件
-
layout
目录:存储安卓程序当中的布局文件。用于控制布局显示什么内容。
-
mipmap
目录:主要是保存项目中应用的启动图标。
-
三、使用安卓模拟器
-
模拟手机或者平板等安卓操作系统设备的模拟器。
-
通过 AVD 作为窗口操作模拟器。
四、运行安卓应用
- 模拟器运行
- 启动模拟器
- 运行程序
- 手机运行
五、HelloWorld扩展
01 案例分析
-
实例:编写开心消消乐的开始游戏界面
-
界面分析
- ① 文本框组件
- ②、③ 按钮组件
02 实战演示
-
第一步:创建新模块
-
Application name:开心消消乐
-
Module name:自动生成,但是要改成汉语拼音
-
可能会有的错误提示
Irushd package name: Paekoge segments rmast be of non-zero longth
修改包名,将最后的
.
删去。 -
选择空模板
-
-
第二步:module创建成功,进行修改
- 打开布局文件
activity_main.xml
- 将代码中的
Hello World
修改为开心消消乐
。 - 然后切换到
Design
视图,手动拖动文本框到水平居中位置。 - 接下来添加按钮,在设计视图的面板中找到按钮组件,将其拖动到屏幕当中。
- 在右侧工具栏修改按钮的文字内容。
- 打开布局文件
用户界面设计基础
〇、内容大纲
- UI设计相关的概念
- 控制UI界面
- 布局管理器
一、UI设计相关的概念
00 UI设计相关的概念
- 什么是UI设计?
UI
即用户界面。- UI设计即用户界面设计。
- 重要的两个概念
- View
- ViewGroup
- 安卓 UI 组件的层次结构
- 所有的界面都是由 View 类或者 ViewGroup 类以及它们的子类组合而成。
01 View
-
可以理解为视图。
-
占据屏幕中的一块矩形区域,负责提供组件绘制和事件处理的方法。
-
View类位于android.view包中;View类的子类一般都位于android.widget包中。
-
View 类常用属性:在API文档中寻找
android:id
,用于为组件设置一个唯一的标识。android:background
设置背景,图片或者颜色值。android:padding
用于设置内边距。
02 ViewGroup
- 容器
- ViewGroup控制其子组件分布时依赖的内部类
- ViewGroup.LayoutParams类
- ViewGroup.MarginLayoutParams类
- ViewGroup.LayoutParams类
- 控制布局的高度和宽度
- android:layout _height,android:layout_width
- ViewGroup.MarginLayoutParams类
- 控制子组件的外边距
- 控制子组件的外边距
二、控制UI界面
-
选择控制UI界面的方法
(1) 使用XML布局控制UI界面 (推荐)
(2) 在Java代码中控制UI界面
(3) 使用XML和Java代码混合控制混合UI界面
(4) 开发自定义的View
-
使用XML布局控制UI界面
-
即将控制布局界面的代码写在XML文件当中。
-
方法步骤
(1) 在Android应用的res/layout目录下编写XML布局文件。
(2) 在Activity中使用以下Java代码显示XML文件中布局的内容。
setContentView(R.layout.activity_main);
activity_main 表示布局页面的名称。 -
方法步骤的两步一般会自动生成。
-
-
实例:使用XML布局文件实现游戏的开始界面
-
创建新模块。
-
将准备好的背景图片复制到 res\mipmap 目录中。
-
修改布局文件
activity_main.xml
。 (1) 修改布局管理器:将布局管理器修改为帧布局管理器 FrameLayout。
(2) 设置背景属性,添加图片。
-
设置文本框的内容、大小、颜色。
设置内容使用字符串变量来实现。
-
在 MainActivity.java 中引用布局文件。
三、布局管理器
00 布局管理器
- 什么是布局管理器?
- 用于控制是怎样摆放的。
- 常用的布局管理器
- 相对布局管理器:RelativeLayout
- 线性布局管理器:LinearLayout
- 帧布局管理器:FrameLayout
- 表格布局管理器:TableLayout
- 绝对布局管理器:AbsoluteLayout(高版本已过期)
- 网格布局管理器:GridLayout
01 相对布局管理器
(1) 基础知识
-
参考点
- 需要以哪个组件作为参考点,别的组件相对参考点组件进行摆放。
-
案例
-
通过
RelativeLayout
标签定义相对布局管理器- xmlns:android 和 xmlns:tools ,默认如此,写法一致。
- android:layout_width:用于设置布局宽度。
- android:layout_height:用于设置布局高度。
- android:paddingXXX:用于设置内边距。
- android:gravity:用于设置布局管理器当中各子组件的摆放方式。
- android:ignoreGravity:用于指定哪些组件不受android:gravity属性影响。
-
补充提供的属性:ReLativeLayout.LayoutParams
-
指定组件相对于参考点位置的四个属性
(1) android:layout_above
(2) android: layout_below
(3) android: layout_toLeftof
(4) android: layout_toRightof
-
设置组件与布局管理器哪边对齐(布尔类型)
(1) android: layeut_alignParentBottom
(2) android: layout__alignParentLeft
(3) android: layout_alignParentRight
(4) android: iayout_alignParentTop
-
设置组件与哪个组件的边界对齐
(1) android: layout_alignBottom
(2) android: layout_alignLeft
(3) android: layout_alignRight
(4) android: layout_alignTop
-
设置组件位于布局管理器的哪个位置
(1) android: layout_centerHorizontal
(2) android: layout_centerInParent
(3) android: layout_centerverticai
-
(1) 实战演示
- 应用相对布局实现软件更新提示页面。
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
安卓开发实践笔记
//+++添加部分+++
@Override
public void onClick(View v) {
switch (v.getId()){
// v.getId()获得当前组件的id值
case R.id.myClick:
myClick(v);
break;
case R.id.sure:
btnOperateList(v);
break;
case R.id.write:
btnEditList(v);
break;
}
}
private void initData(Cursor cursor){
mDatas.clear();
while(cursor.moveToNext()){
DataBean dataBean = new DataBean(cursor.getString(cursor.getColumnIndex("_id")), cursor.getString(cursor.getColumnIndex("name")), cursor.getString(cursor.getColumnIndex("tel")),cursor.getString(cursor.getColumnIndex("groupName")));
mDatas.add(dataBean);
}
}
/**
* 编辑、取消编辑
* @param view
*/
public void btnEditList(View view) {
mAdapter.flage = !mAdapter.flage;
if (mAdapter.flage) {
write.setText("取消");
title.setText("批量删除");
sure.setVisibility(View.VISIBLE);
} else {
write.setText("编辑");
title.setText("通讯录");
sure.setVisibility(View.GONE);
}
mAdapter.notifyDataSetChanged();
}
/**
* 删除选中数据
* @param view
*/
public void btnOperateList(View view) {
if (mAdapter.flage) {
for (int i = 0; i < mDatas.size(); i++) {
if (mDatas.get(i).isCheck) {
dbHelper.del(Integer.parseInt(mDatas.get(i).id));
}
}
Cursor cursor=dbHelper.query();
initData(cursor);
mAdapter = new MyAdapter(MainActivity.this, mDatas);
MainActivity.this.listView.setAdapter(mAdapter);
mAdapter.flage=true;
btnEditList(view);
}
}
}