-
junit 单元测试
java 注解 过时的 deprecated 压制警告 supresswarnings 覆盖父类的方法 override
-
XML
作用
① server client之间传递数据
② 数据保存
③ 配置文件
<?xml version="1.0" encoding="utf-8"?> 必须在文档的第一行声明
<根元素 属性=''>
<a>
<b>
北京
</b></a>
<c/>
</根元素>
<!---->
<![cdata[]]>
*格式良好xml文档 符合xml语法
有效的 符合约束文档的要求*
- **
xml约束文档
**
控制哪些标签可以出现 出现的次数 出现的顺序 标签的子元素的类型 哪些属性必须出现 可有可无
属性取值 是否可以重复 取值范围
dtd .dtd
schema 格式 xml .xsd
对名称空间支持良好 namespace
android 布局文件 配置文件 使用schema约束
xml解析
*获取工厂->获取解析器
- dom 加载整个文档 树状结构 Document对象 可以修改文档
- sax 一个元素一个元素的解析 xmlreader 设置一个处理器 ContentHandler startDocument
endDocument startElement endElement character xmlreader.parse(); - pull 一个元素一个元素的解析 setinput XMLPullParser.END_TAG, START_TAG
START_DOCUMENT END_DOCUMENT TEXT*
①获取工厂
②获取解析器
③设置输入源
④获取事件类型 int eventType = getEventType();
while(eventType != END_DOCUMENT){
switch(eventType){
getName()->获取到元素的名字
}
eventType = parser.next();
}
paser.next();->解析下一个元素 并且返回事件类型
json 纯移动端项目
可以传递数据 保存数据 优势节省流量
JSONObject {'key':'{}'} String int long double boolean NULL JSONObject JSONArray
JSONArray[{},{}
]
1 1G~4G的介绍
G generation 代 1g 第一代无线通信技术 模拟网络 数字 信号差 不能发短信 安全性比较差
2G gsm cdma moto nokia 2017年关闭 gprs 128kbps Byte 16k 7 10k 20M symbain
3G wcdma cdma2000 3Mbps 100KB 10几倍 android iPhone iOS 硬件 电容屏 多点触控 手势操作图片浏览 语音聊天
4G 比3g又提高了10几倍 2MB/s 网络直播 视频相关
5G nokia 4g提高了10几倍 20MB/s VR AR
2 Android操作系统的介绍
1.0 artroboys 铁壁阿童木
1.0 bate 发条机器人
1.5 吃的
5.0 棒棒糖
6.0 棉花糖
7.0 牛轧糖
android市场占有率 80%
3 Android系统版本介绍
4.0以下的系统版本没必要再支持了 市场占有率低于3%
4.4 5.0_5.1
最新7.0
4 Android系统结构
5 Android虚拟机介绍
java代码运行在虚拟机中
java标准的虚拟机 jvm dalvik dvm
art android runtime 替换 dalvik 4.4开始(可选的) 5.0开始 都换成了art
art 把翻译的工作提前 安装的时候 直接把字节码翻译成机器码 安装之后占磁盘空间比之前大了(用空间换时间)
dalvik 一边翻译一边执行
6 开发环境的搭建 ADT SDK
7 sdkManager介绍
8 模拟器的简介及创建
cpu架构 arm 公司只设计cpu 不生产具体的产品 卖授权 高通 骁龙 三星猎户座 华为 海思 联发科 mtk
intel x86 atom intel加速器
9 DDMS透视图
10 Android-helloworld
11 Android工程目录结构
-
src java代码
-
gen 自动生成的 R.java 不要手动修改
-
Android4.3 创建项目是 指定compliesdk 用那个版本编译 最终就对导入那个android版本的jar包
Android Dependencies android的支持库 用来支持低版本的设备 使用较新的功能 -
assets 资产目录 这个目录里存放的文件不会被编译
-
bin 编译之后生成的文件都放到这个目录下
-
libs 项目依赖的jar包可以放到这个目录
-
res-> 资源目录
-
drawable 图片
-
layout 布局文件
values-> dimens.xml 尺寸的声明 strings.xml 项目中用到的字符串 styles.xm 项目用到的主题和样式
-
AndroidManifest.xml 清单文件
12 Android 打包过程
keystore 保存好 密码不要忘了 如果忘了 或者找不到keystore文件 只能用新的 你的应用不能覆盖升级 只能提示用户卸载
标志一个android项目的唯一性
①项目的包名
②项目的签名 keystore 文件不要丢 密码要记住 有效期要设置的时间长一些
Android Debug Bridge adb android调试桥
打包生成的文件apk
13 ADB指令练习
要在控制台使用adb需要把 sdk/platform-tools/ 这个路径加到环境变量中
adb start-server 开启adb服务
adb kill-server 杀死adb服务
adb uninstall + 包名 卸载应用 adb uninstall com.itheima.helloworld
adb install + apk所在的路径 安装应用 adb install C:\Users\beibei\Desktop\1.apk
adb push + pc文件路径 + android设备的路径 把电脑上的文件推到设备上 adb push C:\Users\beibei\Desktop\hello.txt sdcard/
adb pull 设备上文件的路径 pc保存文件的路径 把android设备上的文件保存到电脑上 adb pull sdcard/hello.txt C:\Users\beibei\Desktop\1.txt
adb shell 可以进入到linux命令行 执行linux命令
ls 列出所有文件
cd 进入到某个文件夹
rm 删除文件
cat 显示文件内容
mkdir 创建目录
adb shell 敲exit 可以返回windows命令行
14电话拨号器案例
-
画UI user interface 画界面 layout->xml布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2. xmlns:tools="http://schemas.android.com/tools" 3. android:layout_width="match_parent" 4. android:layout_height="match_parent" 5. tools:context=".MainActivity" > 6. 7. <TextView 8. android:id="@+id/textView1" 9. android:layout_width="wrap_content" 10. android:layout_height="wrap_content" 11. android:text="请输入手机号" /> 12. 13. <EditText 14. android:id="@+id/editText1" 15. android:layout_width="wrap_content" 16. android:layout_height="wrap_content" 17. android:layout_alignParentLeft="true" 18. android:layout_below="@+id/textView1" 19. android:hint="请输入电话号码" 20. android:ems="10" > 21. 22. <requestFocus /> 23. </EditText> 24. 25. <Button 26. android:id="@+id/button1" 27. android:layout_width="wrap_content" 28. android:layout_height="wrap_content" 29. android:layout_alignParentLeft="true" 30. android:layout_below="@+id/editText1" 31. android:text="拨打此号码" /> 32. 33. </RelativeLayout>
-
对着UI写JAVA代码
public class MainActivity extends Activity {
2. private EditText et_text;
3.
4. // 当activty创建的时候 系统就会调用oncreate方法
5. //大部分初始化的工作都要在oncreate中进行
6. //初始化的工作包括: 调用setcontentView方法 把一个布局文件加载到屏幕上
7. //通过findviewbyId方法 把布局中要操作的控件通过代码的方式找到
8.
9. @Override
10. protected void onCreate(Bundle savedInstanceState) {
11. super.onCreate(savedInstanceState);
12. //把一个xml布局文件 画到手机屏幕上 作为这个activity的界面
13. setContentView(R.layout.activity_main);
14. //要找到输入框和按钮
15. et_text = (EditText) findViewById(R.id.editText1);
16. //找按钮
17. Button button = (Button) findViewById(R.id.button1);
18. MyonclickListener listener = new MyonclickListener();
19. //给按钮设置点击事件
20. button.setOnClickListener(listener);
21. }
22.
23. private class MyonclickListener implements OnClickListener{
24.
25. @Override
26. public void onClick(View v) {
27. //当按钮被点击的时候 就会走这个onclick方法
28. System.out.println("按钮被点击了");
29. //获取用户在输入框的输入 edittext 有一个方法 getText可以获取用户的输
入
30. String input = et_text.getText().toString();
31. //判断输入是否为空 TextUtils.isEmpty通过这个api可以判断字符串是否为空
或者长度为0
32. if(TextUtils.isEmpty(input)){
33. //如果为空提示用户 输入不能为空
34. System.out.println("输入内容为空");
35. //Toast 通过这个类可以弹出提示文字 弹出吐司 makeText方法三个参数
36. //第一个参数 上下文(context) MainActivity继承activity activity是Co
ntext的子类 所以直接传activity的实例就可以了
37. //第二个参数 要弹出的文字
38. //第三个参数 要显示提示文字的时长 Toast.LENGTH_LONG 或者 Toast.LEN
GTH_SHORT
39. //注意调用.show方法才能显示出这个提示文字
40. Toast.makeText(MainActivity.this, "电话号码不能为空", Toast.LENGTH
_LONG).show();
41. }else{
42. //如果不为空就调用拨打电话的应用
43. System.out.println("拨打电话::"+input);
44. //创建一个意图 告诉系统我要干什么
45. Intent intent = new Intent();
46. //给意图添加一个动作 打电话
47. intent.setAction(Intent.ACTION_CALL);
48. //给意图携带参数 uri 统一资源标识符 电话号码
49. Uri uri = Uri.parse("tel:"+input);
50. intent.setData(uri);
51. //调用打电话的应用
52. startActivity(intent);
53. }
54. }
55. }
56. }
- 部署到设备看效果
activity: activity是一个组件 用户可以通过这个组件 在屏幕上跟你的应用进行交互(手机上看到的界面都是activity)
15 按钮的四种点击事件
- ①有名内部类
private class MyonclickListener implements OnClickListener{
- - @Override
- public void onClick(View v) {
-
- //当控件被点击的时候就会调用这个onclick方法
- //①获取用户的输入
- String number = et_number.getText().toString();
- //②判断用户输入是否为空
- if(TextUtils.isEmpty(number)){
- //如果为空 提示用户输入内容
- //Toast.makeText 向界面输出一个短暂的提示
- //第一个参数 上下文context Activity就是一个上下文 可以传入当前activity对象
- //第二个参数 要显示的提示文字
- //第三个参数 显示提示的时间长度 Toast.LENGTH_SHORT(显示的时长较短) Toast.LENGTH_LONG(显示时间稍长)
- //不要忘记要调用show()方法 显示这个Toast
- Toast.makeText(MainActivity.this, "电话号码不能为空", Toast.LENGTH_SHORT).show();
- System.out.println("用户输入是空的");
- }else{
- //如果不为空 用获取的电话号码 打电话
- System.out.println("打电话:"+number);
- //Intent 意图 就是对要进行的操作的抽象描述
- Intent intent = new Intent();
- //给意图设置要操作的动作 打电话的动作 ACTION_CALL
- intent.setAction(Intent.ACTION_CALL);
- //给意图设置要携带的数据
- //URL 统一资源定位符 http:// ftp:// https:// abc://
- //uri 统一资源标示符 可以自定义协议 url 子类父类的关系
- Uri data = Uri.parse("tel:"+number);
- intent.setData(data);
- //开启打电话的activity(打电话的界面)
- startActivity(intent);
- }
- }
- }
- ②匿名内部类
1.public class MainActivity extends Activity {
2.
- private EditText et_number;
- - @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- //找到要操作的控件
-
- et_number = (EditText) findViewById(R.id.editText1);
- Button btn_call = (Button) findViewById(R.id.button1);
-
- //给按钮添加点击事件 匿名内部类
- btn_call.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
- //获取用户输入
- String number = et_number.getText().toString().trim();
- //判断输入是否为空
- if(TextUtils.isEmpty(number)){
- //为空提示用户
- Toast.makeText(MainActivity.this, "输入不能为空", Toast.LENGTH_SHORT).show();
- }else{
- //不为空打电话
- Intent intent = new Intent();
- //指定动作
- intent.setAction(Intent.ACTION_CALL);
- //设置数据
- intent.setData(Uri.parse("tel:"+number));
- startActivity(intent);
- }
- }
- });
- }
37.}
- ③Activity实现接口
1.public class MainActivity extends Activity implements OnClickListener {
2.
3. private EditText et_number;
4.
5. @Override
6. protected void onCreate(Bundle savedInstanceState) {
7. super.onCreate(savedInstanceState);
8. // 把布局文件加载到界面上
9. setContentView(R.layout.activity_main);
10. // 找到关心的控件
11.
12. et_number = (EditText) findViewById(R.id.editText1);
13. Button btn_call = (Button) findViewById(R.id.button1);
14. Button btn2 = (Button) findViewById(R.id.button2);
15. Button btn3 = (Button) findViewById(R.id.button3);
16. btn_call.setOnClickListener(this);
17. btn2.setOnClickListener(this);
18. btn3.setOnClickListener(this);
19. }
20.
21. @Override
22. public void onClick(View v) {
23. // View v 参数 当控件被点击的时候 被点击的对象就会作为参数传进来 可以通过控件的id进行区分
24. int id = v.getId();
25. switch (id) {
26. case R.id.button1:
27. String number = et_number.getText().toString().trim();
28. if (TextUtils.isEmpty(number)) {
29. Toast.makeText(this, "输入不能为空", Toast.LENGTH_SHORT).show();
30. } else {
31. Intent intent = new Intent();
32. intent.setAction(Intent.ACTION_CALL);
33. intent.setData(Uri.parse("tel:" + number));
34. startActivity(intent);
35. }
36. break;
37. case R.id.button2:
38. Toast.makeText(this, "按钮2被点击", Toast.LENGTH_SHORT).show();
39. break;
40. case R.id.button3:
41. Toast.makeText(this, "按钮3被点击", Toast.LENGTH_SHORT).show();
42. break;
43. }
44. }
45.}
第四种写法
16 Android中常用布局
Linearlayout 线性布局
RelativeLayout 相对布局
FrameLayout 帧布局 (框架布局)
TableLayout (表格布局)
使用频率
RelativeLayout> LinearLayout> FrameLayout >TableLayout
17 Android中单位介绍
通过电话拨号器练习点击事件的四种写法★★★★★