android
第一章:android入门
属于Google发布Android源代码的授权方式是Apache开源许可证
短信程序与联系人程序属于应用程序层 音频驱动属于Linux内核层
图片资源
扩展名为:.png,.jpg,.gif,.9.png
等的文件
图片资源都在文件夹app的src下的res里
图片资源分类:
1.应用图标资源:在mipmap里
2.界面中使用的图片资源:在drawable里
调用图片资源的方法:
主题和样式的资源
主题是包含一种或多种的格式化属性集合,在程序中调用主题资源可改变窗体的样式,对整个应用或某个Activity存在全局性影响。
定义位置:res/values目录下的themes.xml中
<style><!--用来定义主题,属性name用来定义主题的名称,parent来定义副主题-->
<item></item><!--用于设定主题的样式,属性name设置样式名称-->
</style>
设置view的具体样式:定义位置在res/values目录下的theme.xml文件中,然后在activity_main.xml里的TextView中设置style="@style/样式名称即可"
<style><!--用来设置样式-->
<item></item><!--设置控件的样式-->
</style>
布局资源
布局资源常用于搭建程序中的各个界面
定义位置:res/layout文件夹中
调用方式:
字符串资源
位置:res/values/文件夹的strings.xml中
编写字符串资源:
调用资源:
颜色资源
定义位置:res/values/文件夹的colors.xml文件中
调用颜色资源:
定义颜色值:
例子:
尺寸资源
尺寸资源:例如view的宽高值
定义位置:res/values/文件夹里的dimens.xml中
调用方法:
在java代码里进行调用:
getResources().getDimension(R.dimen.名称);
在xml里进行调用:
@dimen/名称
单元测试
单元测试是指在应用程序开发过程中对最小的功能模块进行测试
分类:
1.android单元测试:速度比较慢,ExampleInstrumentedTest
2.junit单元测试:只适合java,ExampleUnitTest类
LogCat的使用
LogCat是android中的命令行工具,用于获取程序从启动到关闭的日志信息
Log类所输出的日志内容分六个级别:
第二章 android常见界面布局
在XML文件中编写布局:有效的将界面中布局的代码和Java代码隔离,使程序的结构更加清晰。
在Java代码中编写布局:在Android中所有布局和控件的对象都可以通过new关键字创建出来,将创建的View控件添加到ViewGroup布局中,从而实现View控件在布局界面中显示。
常见的界面布局:
线性布局,相对布局,帧布局,表格布局,约束布局
通用属性:
LinearLayout线性布局
主要以水平或垂直方式来显示界面中的控件。当控件水平排列时,显示顺序依次为从左到右,当控件垂直排列时,显示顺序依次为从上到下。
设置水平布局:在activity.xml文件里,先将界面设置为水平:
用属性orientation来设置vertical竖直,还是horizontal水平排列
RelativeLayout相对布局
相对布局是通过相对定位的方式指定子控件位置,即以其它控件或父容器为参照物,摆放控件位置
定义格式:
属性:
例子:
效果图:
TableLayout表格布局
采用行、列的形式来管理控件,它不需要明确声明包含多少行、多少列,而是通过在TableLayout布局中添加TableRow布局来控制表格的行数,通过在TableRow布局中添加控件来控制表格的列数。
属性:
例如:实现下面的表格
三行三列,且第三列被拉伸
运行代码:
FrameLayout帧布局
帧布局用于在屏幕上创建一块空白区域,添加到该区域中的每个子控件占一帧,这些帧会一个一个叠加在一起,后加入的控件会叠加在上一个控件上层显示
所有控件都默认显示在屏幕左上角。
定义格式:
例如:
效果图:
第三章android常见界面控件
TextView控件
显示文本信息
EditText控件
EditText表示编辑框,它是TextView的子类(可以使用TextView里的属性),用户可在此控件中输入信息。
属性:
例子:
代码:
Button控件
Button控件表示按钮,它继承自TextView控件,既可以显示文本,又可以显示图片,同时也允许用户通过点击来执行操作,当Button控件被点击时,被按下与弹起的背景会有一个动态的切换效果,这个效果就是点击效果
方法1:
在xml里的相应按钮设置点击事件,再在java里设置方法
在xml里设置:onClick="click"
在java的MainActivity里设置一个变量表示被点击的按钮:
private Button button1;
在onCreate里将他赋值成被点击的按钮:
button1=findViewById(R.id.button1);
在java里设置点击之后发生的事:
public void click(View view){
button1.setText("按钮1已被点击");
}
xml代码:
java代码:
方法2:
匿名内部类:
在java代码中对按钮操作:
方法3:
void onCreate(){
private Button button3;
button3=findViewById(R.id.button3);
button3.setOnClickListener(this);
}
@Override
public void onClick(View v){
button3.setText("按钮3被点击");
}
ImageView控件
显示图片
例:
效果图:
background是背景图的属性,大小会根据背景尺寸伸缩
src并不会根据背景伸缩,还是原图的尺寸
RadioButton控件
RadioButton为单选按钮,android:checked属性指定是否选中的状态。
RadioGroup是单选组合框,可容纳多个RadioButton,并把它们组合在一起,实现单选状态。
CheckBox控件
CheckBox表示复选框,它是Button的子类,用于实现多选功能通过android:checked属性指定CheckBox控件是否选中的状态。
CheckBox没有Group
xml中的定义:
ListView控件
ListView以列表的形式展示数据内容,并且能够根据列表的高度自适应屏幕显示。
要想在ListView里显示内容,就需要选择适配器
常用的数据适配器:BaseAdapter,SimpleAdapter,ArrayAdapter
BaseAdapter顾名思义是基本的适配器。他实际上是一个抽象类,通常在自定义适配器时会继承BaseAdapter
例如:进行物品列表item的实现
分别用下面的数组来设置每个物品的名字,价格和图片
然后再设置一个类:
最后在onCreate里设置适配器:
第四章 Activity
Activity:负责与用户交互的组件
Activity的开启和关闭
Intent
Intent被称为意图,是程序中各组件进行交互的一种重要方式,他不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传递。
一般用于启动Activity、Service以及发送广播等。根据开启目标组件的方式不同,Intent被分为两种类型显示意图和隐式意图。
intentfilter有三个属性:
action属性:
data属性:
category属性:
Activity之间的跳转
1.传递数据用intent的putExtra()方法传递数据
将MainActivity里的数据传到SecondActivity
首先在MainActivity里定义:
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("student","小明");
startActivity(intent);
再在SecondActivity里用getXXExtra()获取对象:
Intent intent=getIntent();
String name=intent.getStringExtra("student");
1.用Bundle类传递数据
先在MainActivity中将数据传输给SecondActivity
Intent intent=new Intent();
intent.setClass(this,SecondActivity.class);
Bundle bundle=new Bundle();//创建一个Bundle对象
bundle.putString("account","江小白");//将用户名封装到Bundle中
intent.putExtras(bundle);//将bundle对象封装到intent对象
startActivity(intent);
在SecondActivity中获取传递信息
Bundle bundle=getIntent().getExtras();//获取Bundle对象
String account=bundle.getString("account");//获取用户名
Activity之间的数据回传
有三种方法:
Fragment
Fragment是一种可以嵌入在Activity中的UI片段,它可以用来描述Activity中的一部分布局。
动态添加:
在Activity中使用Fragment时,可以通过两种方式将Fragment添加:一种是通过布局文件添加,一种是通过代码动态添加。
通过布局添加:
动态添加:
第五章数据存储
数据存储方式
有五种:文件存储,SharePreferences,SQLite数据库,ContentProvider,网络存储
文件存储
有两种存储方式:内部存储和外部存储
将数据存入文件中:
1.内部存储:
FileOutputStream fos=openFileOutput(String name,int mode)//打开应用程序中对应的输出流,将数据存储到指定的文件中,mode是操作模式
FileInputStream fis=openFileInput(String name);//打开应用程序对应的输入流,读取指定文件的数据
mode取值:
MODE_PRIVATE:该文件只能被当前程序读写
MODE_APPEND:该文件的内容可以追加
MODE_WORLD_READABLE:该文件的内容可以被其他程序读
MODE_WORLD_WRITEABLE:该文件的内容可以被其他程序写
2.外部存储(以存到SD卡为例):
从文件中读取数据:
1,内部读取:
2.外部读取:
SharePreferences存储
SharedPreferences:是Android平台上一个轻量级的存储类,用于程序中一些少量数据持久化存储。
将数据存入SharePreferences中:
数据的读取和删除:
SQLite数据库的存储
SQLite是Android自带的一个轻量级的数据库,他运算速度快,占用资源少,支持基本SQL语法。
sQLite数据库可以存储应用程序中的大量数据,并对数据进行管理和维护。
创建数据库:
添加数据:
删除数据:
修改数据:
查询数据:
使用sql语句进行数据库操作:
SQLite的事务
第六章内容提供者
概述:
查询其他程序的数据
第七章广播机制
动态注册网络接受者:
public class MainActivity extends AppCompatActivity {
private MyBroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
receiver = new MyBroadcastReceiver();
// 实例化过滤器并设置要过滤的 action
String action = "android.provider.Telephony.SMS_RECEIVED";
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(action);
// 注册广播
registerReceiver(receiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
// Activity 销毁时注销广播接收者
unregisterReceiver(receiver);
}
}
第八章服务
创建服务
public class MyService extends Service {
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
}
服务的启动方式
通过 startService() 方法,带参数
Intent intent = new Intent(MainActivity.this, MyService.class);
startService(intent);
通过 BindService() 方法
BindService(Intent service, ServiceConnection conn, int flag)
第九章网络编程
JSON
使用 JSONObject 类解析对象结构的数据:
JSONObject jsobObj = new JSONObject(json1);
String name = jsonObj.optString("name");
int age = jsonObj.optInt("age");
boolean married = jsonObj.optBoolean("married");
使用 JSONArray 类解析数组结构的数据
JSONArray jsonArray = new JSONArray(json2);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsobObj = jsonArray.getJSONObject(i);
String name = jsonObj.optString("name");
int age = jsonObj.optInt("age");
}
Handler消息机制
Handler 是一种异步回调机制,主要负责与子线程进行通信,主要包括四个关键对象:
Message:在线程之间传递的消息
Handler:处理者,主要负责 Message 的发送以及处理
MessageQueue:消息队列,存放 Handler 发送过来的消息,按照先入先出的规则执行
Looper:不断的从消息队列中抽取消息并传递到 Handler 对象的 handleMessage() 方法中
第十章图形图像处理
绘图类:BitmapFactory类
调用:
第十一章多媒体应用开发
使用MediaPlayer类播放音频
方法:
播放音频文件:prepare(),start()
暂停播放:pause()
重新播放:seekTo(0)
停止播放:stop()