Android
参考书籍《第一行代码:Android 第2版》
语言:java
1、基础
新建项目选绿的Empty view Activity
目录结构(project)
App:项目中的代码、资源等内容
Build: 编译中自动生成的文件
Libs:放第三方jar包
AndroidTest:测试用例,用于自动化测试
Java:放java代码
Res:在项目中使用到的所有图片、布局、字符串等资源
AndroidMainfest.xml:整个Android项目的配置文件,注册四大组件的配置文件,添加权限声明等。
Build:编译中自动生成的文件
65==、、、、、、、、、、、Gradle:配置文件
layout
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/button_1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button 1" tools:ignore="MissingConstraints" /> </androidx.constraintlayout.widget.ConstraintLayout>
注册
AndroidManifest.xml
<activity android:name=".FirstActivity" android:exported="true" > <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity>
Toast
相当于弹出的提醒消息
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_layout); Button button1=(Button)findViewById(R.id.button_1); //获取到按钮示例 button1.setOnClickListener(new View.OnClickListener(){ //为按钮注册一个监听器 @Override public void onClick(View view) { //执行监听器中的onClick方法 Toast.makeText(FirstActivity.this, "You clicked Button_1", Toast.LENGTH_SHORT).show(); //3个参数:对象、文本内容、显示时长 } }); }
2、活动
-
基本用法
-
启动活动
-
传递数据
-
活动的生命周期
-
活动的启动模式
-
实际开发中的实践技巧
intent
各组件之间进行交互的一种方式,用于启动活动/服务/发送广播。
显示intent
在FirstActivity中,在FirstActivity这个 活动基础上打开SecondActivity活动。
public void onClick(View view) { Intent intent=new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent); }
隐式intent
指定action和category等信息,交由系统分析这个intent 找到合适的活动启动。
配置action和category:(匹配上就能响应intent)
<activity android:name=".SecondActivity" tools:ignore="DuplicateActivity" android:exported="true"> <intent-filter> <action android:name="com.example.activitytest.ACTION_START"/> <category android:name="android.intent.category.DEPAULT"/> </intent-filter> </activity>
FirstActivity:
直接传action字符串,category在调用startActivity()方法时默认添加。
public void onClick(View view) { Intent intent=new Intent("com.example.activitytest.ACTION_START"); startActivity(intent); }
启动其他程序的活动:
public void onClick(View view) { Intent intent=new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com")); startActivity(intent); }
向下一个活动传递数据
重载putExtra(键,值)。
返回数据给上一个活动
stratActivityForResult() :启动活动,在获得销毁时能返回结果给上一个活动。 好像已经没了。
setResult(向上一个活动返回处理结果,把带有数据的intent传递回去) :专门用于向上一个活动返回数据
在SecondActivity中按back键返回怎么向First传递数据? 在Second中重写onBackPressed()
启动模式
启动模式一共有4种,分别是standard、singleTop、singleTask和singleInstance,可以在AndroidManifest.xml中通过给<activity>标签指定android:launchMode属性来选择启动模式。
3、UI
xml中编写界面
常用控件
使用语法:在layout->activity_main.xml中,给控件定义一个id,指定宽度高度,加入该控件特有的属性
1、TextView :显示一段文本信息
2、Button
可以在MAinActivity中为 Button点击事件 注册(匿名类/接口方式注册)一个监听器。
3、EditText :允许用户在控件里输入和编辑内容,并对这些内容进行处理
hint:输出时显示提示性文本
4、ImageView:展示图片
图片放在drawable目录下(在res中新建drawable-xhdpi)。
setImageResource(新图片) :修改图片为新图片
5、PrograssBar:显示进度条
控件的可见属性:所有的Android控件都具有这个属性,可以通过android:visibility进行指定,可选值有3种:visible、invisible和gone。
-
visible表示控件是可见的,这个值是默认值,不指定android:visibility时,控件都是可见的。
-
invisible表示控件不可见,但是它仍然占据着原来的位置和大小,可以理解成控件变成透明状态了。
-
gone则表示控件不仅不可见,而且不再占用任何屏幕空间。我们还可以通过代码来设置控件的可见性,使用的是setVisibility()方法,可以传入View.VISIBLE、View.INVISIBLE和View.GONE这3种值。
6、AlertDialog:弹出警告信息的对话框
7、ProgressDialog:弹出带进度条的对话框
8、ScrollView:滚动查看内容
4种基本布局
1、LinearLayout线性布局:把布局包含的控件线性排列。可以按比例指定控件大小。
2、RelativeLayout相对布局:通过(相对于父布局/控件)定位指定控件位置
3、FrameLayout帧布局:默认在左上角
4、百分比布局:需要添加依赖。
、自定义布局
新建一个自己的布局.xml -> 在main.xml里加一行include把自定义布局引进来
自定义控件
在main.xml中,和添加普通控件一样,但需要指定控件的完整类名
ListView控件
实现页面滚动翻阅。
1、简单实现
①在布局文件中加入ListView控件
②
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int data; ArrayAdapter<String> adapter= new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_lst_item_1,data); //data的数据类型没法传到ListView,要用适配器 //android.R.layout.simple_lst_item_1 是内置的布局文件 ListView listview=(ListView) findViewById(R.id.list_view); listview.setAdapter(adapter); //将构建好的适配器对象传进去,建立和数据和ListView的联系 }
2、优化
3、提升运行效率
① getView()方法中的convertView参数,将加载好的布局进行缓存。
② ViewHolder对控件的实例进行缓存。
4、点击事件
setOnItemClickListener() 为ListView注册一个监听器。
OnItemClick()方法:通过position参数判断出用户点击的是哪个子项。
RecyclerView
更厉害的滚动控件,优化了ListView。
需要添加依赖。 implementation ("androidx.recyclerview:recyclerview:1.1.0")
可以设置横向滑动、瀑布滑动等。
点击事件
没有监听器方法,要自己给View注册点击事件view.OnClickListener()。
实践 UIBestPractice
Nine-Patch图片
把图片放入res->drawable里,右键图片选择creat 9-patch file
4、碎片
基本使用
1、创建布局文件.xml,一个文件定义一个碎片的布局
2、新建类继承Fragment,类内重写Fragment的onCreateVdiew()方法,在方法中通过LayoutInflate()方法把刚刚定义的布局动态加载进来
3、最后在activity_main.xml中通过<fragment 标签把碎片添加进来
动态添加碎片
activity_main.xml中,weidth='0dp',weight='1'可以让布局铺满整个屏幕
replaceFragmet():将碎片替换成新碎片
1、创建待添加的碎片实例。 2、 获取FragmentManager,在活动中可以直接通过调用getSupportFragmentManager()方法得到。 3、开启一个事务,通过调用beginTransaction()方法开启。 3、 向容器内添加或替换碎片,一般使用replace()方法实现,需要传入容器的id和待添加的碎片实例。 4、提交事务,调用commit()方法来完成
返回栈: addToBackStack().按back键返回上一个碎片而不是直接退出。
碎片与活动之间通信:
fidFragmentById(),在活动中获取碎片的示例,然后可以调用碎片里的方法。
getActivity() 碎片通过调用这个方法得到和当前碎片相关联的活动的示例,调用活动里的方法。
碎片和碎片通信:碎片调用活动,活动调用碎片
5、广播
6、数据存储
文件存储:二进制字符文本等
SharedPreferences存储:键值对
SQLite数据库存储:大型复杂关系型数据
SQLite
SQLiteOpenHelper帮助类,重写onCreate()和onUpgrade()方法。两个示例方法。
LitePal
开源数据库框架(开源库)。
1、创建数据库:定义一个book类,后续要添加标就添加一个类,<mapping>配置在list标签下,LitePal.getDatabase()方法
CURD时book类要继承DataSupport类,创建一个book实例后对表进行操作。
2、添加数据:.set()设置数据,.save()
3、更新数据:.set(),.updateAll()执行更新操作
对列设置默认值:.setToFault()
4、删除数据:DataSupport.deletAll(表,删除的约束条件)
5、查询数据:DataSupport.findAll(表) 返回的是list而不是Cursor对象
查询定制:select(), where(), order(), limit(), offset()
6、调用原生查询:DataSupport.findBySQL() 返回Cursor对象
7、共享数据
访问内容提供器中共享的数据。
CURD和SQLite语法相同,但是不接受表名接收uri。
创建自己的内容提供器:ContentProvider类,重写全部的6个方法,<provider>注册
8、手机多媒体
通知
NotificationManager 管理通知,Notification.builder() 创建Notification对象,NotificationManager.notify(id,Notification对象)把通知显示出来。
getSystemService()方法接收一个字符串参数用来确定获取哪个服务。
Notification对象有5个设置方法。
实现通知点击效果:PendingIntent。像Intent一样可以指明某个意图和启动活动服务,相当于延迟执行的Intent。
获取PendingIntent示例的方法:getActivity() / getBroadcast() / getService()
Notification.Builder().setContentIntent(pi)
对通知进行取消:
Notification.Builder().setAutoCancel() 或 manager.cancel(通知的id)
通知的震动、声音、LED灯等
通知显示长文字/长图片:Notification.Builder().setStyle()方法
setpriorit()设置优先级
摄像头和相册
播放
播放音频:MedaiPlayer类
播放视频:VdoeView类
9、网络技术
访问网络要在xml中声明权限。
WebView控件
显示网页
OkHttp网络通信库
网上传输数据的格式
XML
解析XML格式数据的方式:
1、Pull解析:parseXMLWithPull()
2、SAX解析:新建1个类继承自DefaultHandler,重写父类的5个方法。
JSON
1、官方提供的JSONObject:parseJSONWithJSONObject()
2、谷歌开源库 GSON:添加依赖,把JSON定义一个类加入字段
3、第三方开源库