1.Android开发简介
1.1 搭建环境
- 环境:JDK(java development kit) + Android SDK(配置环境变量)
- 开发工具:AS + Genymotion + ADT(ada development tools)插件
- JDK安装与环境配置
- android studio安装教程
- genymotion安装教程
- 个人经验:在网页能用qq邮箱注册,但是在软件里登不上(挂着代理),所以尽量使用outlook,gmail这类在国外比较流行的邮箱,据说163邮箱也行。
- genymotion如果注册不了帐号,建议采用科学上网的方法
1.2 工程结构
- Android studio和eclipse的工程结构不太一样,android studio一个项目里可以有多个应用,带个小手机标志的文件相当于一个应用。对常见的文件作一个说明,还未涉及到的文件,以后再补充
- Activity:一个页面
- layout:页面的布局
- res:存放android的各种资源文件。其中layout存放界面布局文件,values是存放各种xml格式的资源文件,4个mipmap是存放不同分辨率的图片文件。
- AndroidManifest.xml:新建的Activity要在这里配置。
- R.java:把所有的资源转换一个静态的常量,以便于在代码中显示资源
// Android 4.0以上市场占有率97.1%,Mini SDK选4.0就足够了
1.3 交互
- setContenView() 连接布局文件,如:
setContentView(R.layout.activity_main);
- 控件被点击会触发一个事件setOnClickListener()
- Toast.makeText(Context context, CharSequence text, int duration)
1.4 布局管理
- RelativaLayout:相对布局
- LinearLayout:线性布局
- TableLayout:表格布局
- FrameLayout :帧布局
- RelativeLayout:相对布局
- 它们之间的关系如下:
1.5 签名
- 单击as主菜单中的Build->Generate Signed APK…然后出现下图:
- 如果系统中还没有数字证书,则在上图中单击Create new…按钮,按所示要求填好所有空格
- 填写好之后返回到上图,使用刚刚创建的数字证书储存地址和密码,单击next
- 指定生成apk的地址点击finish即可
2.第一个应用
2.1 AndroidManifest.xml
- allowBackup:是否允许在后台
- icon:修改应用的图标,在Res中mipmap中有5种不同分辨率的图片分类,实际应用中要给出不同分辨率的图以适应不同尺寸的屏幕大小
- build.grdle(不属于该xml文件):可以修改版本号。是google推出的构建工具。
所有的资源放在res文件夹下,以便于布局文件里引用。
2.2 页面的跳转
- findViewById() 返回的是View,在对控件进行初始化的时候要强制类型转换
- 为Button设置点击事件,绑定监听器setOnClickListener()
- Intent:一个意图
Intent(Context packageContext, Class<?> cls)
启动一个Activty
startActivity(Intentintent)
orstartActivityForResult(Intent intent, int requestCode)
3.Activity
3. 1 定时跳转
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
}}, 2000);
3.2 传递数据
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
intent.putExtra(TITLE, title);
startActivityForResult(intent, REQUEST_CODE);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.i(TAG,requestCode + "," + resultCode);
if (requestCode == REQUEST_CODE && resultCode == MainActivity.RESULT_CODE){
if (data != null){
String s = data.getStringExtra(TITLE);
textView.setText(s);
}
}
}
findViewById(R.id.button_first).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.putExtra(SplashActivity.TITLE,"6666");
setResult(RESULT_CODE,intent);
finish();
}
});
Intent intent = getIntent();
if(intent != null){
String title = intent.getStringExtra(SplashActivity.TITLE);
setTitle(title);
}
}
3.3 生命周期
- 生命周期的简介:正如一个人一生会有婴儿,儿童,少年,中年等这些生命阶段一样,一个Activity也会有它固定的生命周期,从被创造出来直到死亡,虽然经历的阶段会相对固定,但是每个阶段所做的却是我们可以指定的。生命周期在手机应用中非常重要。例如:当我们在听歌的时候,突然一个电话响起,这时当前Activity就会立即调用
onPause()
方法,但是我们肯定不会想在听电话的时候还放着音乐,所以可以在onPause()
方法中写入使当前播放停止,保存当前数据的程序,打完电话后返回到播放界面,我们可以在onRestart()
->onStart()
中写入刷新数据,使音乐重新播放的程序。由此可见,Activity的生命周期决定这我们使用android的每一个场景的实现。(以上参考了marschen的视频)
- Activity的三种状态:运行状态,暂停状态,停止状态
- 当一个Activity第一次启动会依次调用:onCreate()->onStart()->onResume()
- 从第一个Activity进入第二个Activity会调用:第一个的onPause()->onCreate()->onstart()->onResume()->第一个的onStop()
- 转入后台后,Activity变为完全不可见,调用:onPause()->onStop()
再次启动该Activity,会调用:onRestart()->onStart()->onResume()
- back stack:
- 可能存放有多个Activity对象,但是只会显示栈顶的Activity
- 当一个Activity开始运行的时候,会被压入栈顶,返回到前一个Activity,当前的Activity会被弹出栈,被销毁。
4.常见控件
4.1 TextView及其子类
- TextView
- 常见属性:
- android: textSize 文本内容大小,用sp作单位
- android: background 设置背景
- android: autoLink 是否指定符合指定格式的文本转化为可单击的超链接形式
- android: singleLine true 文本框不会换行
- android: ellipsize 文本超过TextView长度时如何处理文本内容
- android: selectAllOnFocus 如果文本框的内容可选择,设置是否当它获得焦点时自动选中所有的文本
- Button
- 常见属性
- Button继承了TextView,在界面上生成一个按钮,常见属性可以参考TextView
- 如果想设置按钮的背景颜色,背景图片随用户的动作而改变,可以使用自定义的Drawable对象selector来实现。
- .9.图
- 左侧和上侧共同决定图片的缩放区域:左侧绘制的区域可以在纵向上缩放;上侧绘制的区域在水平上进行缩放;交集的区域可以在两个方向上缩放。
- 右侧和下侧的直线共同决定图片的内容显示区域:右边直线和下边直线分别绘制的矩形的交集就是图片的内容显示区域
- EditText(编辑框)
- 常见属性:
- android: hint 文本默认显示的提示文字
- android: inputType 指定文本框的类型,有number,phone,datat…
- android: password true 该文本框是一个密码框
- 相关方法:
- 长按事件:setOnLongClickListener()
- 特有方法:addTextChangedListsener()
EditText editText = (EditText)findViewById(R.id.edittext);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
- RadioButton(单选框) 和 CheckBox(复选框)
- 继承了Button,可以使用其属性和方法。
- android: checked 指定RadioButton和CheckBox初始时是否被选中
- Radio只能选中一个,要和RadioGroup一起使用,用于定义一组单选框
setOnCheckedChangeListener()
监听单选钮状态的改变
- ToggleButton(状态开关按钮)和Switch(开关)
- 常见属性:
- android: checked 按钮是否被选中
- android: textOff 状态关闭时显示的文本
- android: textOn 状态打开是显示的文本
//以下是ToggleButton
- android: thumb 自定义的Drawable绘制开关按钮
- android: track 自定义的Drawable绘制开关轨道
4.2 ImageView及其子类
- ImageView
- 常见属性
- android: src 显示的资源
- android: scaleType 设置如何缩放或者移动来适应ImageView的大小
- centerCrop:只要图片的最短边显示出来
- center:把图片放在ImageView中间不进行任何缩放
- 控制ImageView显示图片的方法:
- setImageResource(int resId):使用图片资源的ID设置显示图片
- setImageDrawable(Drawable drawable):使用Drawable对象设置显示的图片
- setImageAlpha(int alpha):设置图片的透明度
- ZoomButton:放大缩小按钮。android默认提供了btn_minus和btn_plus两个Drawable属性
4.3 ProgressBar及其子类
- SeekBar(拖动条)
- 属性:thumb:指定一个Drawable对象,改变拖动条的外观
- 可以绑定
OnSeekBarChangeListener
监听器来响应滑块位置的改变
- ProgressBar(进度条)
- 常见属性:
- progressDrawable : 设置该进度条的轨道对应的Drawable对象
- 方法操作进度条
- setProgress(int):设置完成的百分比
- incrementProgressBy():进度条增加或者减少,正增负减