目录
第一节:Android入门
Android概况
Andy Rubin:Android公司开发领头人,2003年成立Android公司,2005年被Google收购,任Google公司副总裁,2013年离职。
Android发展史
常见概念
SDK:Software Development Kit,软件开发工具包
NDK:Native Development Kit,Android原生工具开发包
Android系统架构
第一层:Applications---用户
第二层:Application Framework---开发人员
第三层:Libraries(Android RunTime)---开发人员
第四层:Linux Kernel---内核层,跟硬件打交道,如各种硬件的驱动
Linux Kernel:我们知道Android其实就是一个操作系统,其底层是基于Linux Kernel的,这一层主要完成的是操作系统所具有的功能,比如这一层有许多的驱动程序,正是通过这些驱动程序来驱动我们设备上的硬件设备的。
Android Runtime:Android的运行环境,我们学过java的都知道,java程序的运行需要java的核心包的支持,然后通过JVM虚拟机来运行我们的应用程序,这里Android Runtime里的Core Libraries就相当于java的JDK,是运行android应用程序所需要的核心库,Dalvik Virtual Machine就相当于JVM,这是Google专为Android开发的运行android应用程序所需的虚拟机。
Liberaries:这里面都是Android的库文件,例如我们访问SQLite数据库的库文件等等。
Application Framework:应用程序的框架,这个是非常的重要的,相信Framework这个词大家都应该非常的熟悉了,我们学习Android也主要学的就是这一层,我们通过这些各种各样的框架来实现我们的Application。
Application:这个就是我们开发的Application了。
Android版本
Android2.3:号称最稳定的版本,以前装机量最大的一个版本。
Android3.x:主要用在平板,手机很少用。
Android4.0:实现手机平板跨平台搭载。
开发人员版本选择:考虑市场占有率、版本稳定性、客户群体等。
Android前景
应用领域:车载、智能家电、pos机、AR(增强现实)领域、VR(虚拟现实)领域等。
Android开发工具
IntelliJ IDEA:简称IDEA ,是java编程语言开发的集成环境。
Eclipse:Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。
AndroidStudio:是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。(推荐)
第二节:Activity入门
什么是Activity
- Activity是一个应用程序组件
- 为应用程序提供一个可视化页面
- 用户通过此页面与应用程序进行交互
启动Activity要素
Activity与Layout之间的关系:静态加载控件
Activity与View之间的关系:动态修改控件
第三节:View入门
什么是View
- 屏幕方块内所显示的内容,都可以称为View或View的子类
为控件添加监听器
- 定义Button类
- 获取Button对象
- 定义内部类实现OnClickListener接口
- 重写onClick方法
- 生成监听器对象
- 为控件添加监听器
public class MainActivity extends Activity {
//监听器:1.定义Button类
private Button button;
private int sum=0;
private ButtonListener buttonListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//监听器:2.获取Button对象
button=(Button)findViewById(R.id.button);
//监听器:5.生成监听器对象
buttonListener=new ButtonListener();
//监听器:6.为按钮添加监听器
button.setOnClickListener(buttonListener);
}
//监听器:3.定义内部类并实现OnClickListener接口
class ButtonListener implements OnClickListener{
//监听器:4.重写onClick方法
@Override
public void onClick(View v) {
// 当控件被点击之后调用
sum++;
System.out.println("*************当前点击次数为:"+sum);
textView.setText("*************当前点击次数为:"+sum);
}
}
}
简化:步骤3-6可以简化成为控件添加监听器,一个实现View.OnClickListener接口的匿名类。
public class MainActivity extends Activity {
//监听器:1.定义Button类
private Button button;
private int sum=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//监听器:2.获取Button对象
button=(Button)findViewById(R.id.button);
//监听器:3.为按钮添加监听器
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 当控件被点击之后调用
sum++;
System.out.println("*************当前点击次数为:"+sum);
textView.setText("*************当前点击次数为:"+sum);
}
});
}
}
第四节:Android布局之线性布局
常见布局的种类
- FrameLayout框架布局
- LinearLayout线性布局
- AbsoluteLayout绝对布局
- RelativeLayout相对布局
- TableLayout表格布局
- GridLayout网格布局
- ConstraintLayout约束布局
布局的实现方式
- 通过XML布局文件实现控件布局
- 通过java代码实现控件布局
gravity与layout_gravity
- android:gravity:用于设置该控件中内容相对于该控件的对齐方式
- android:layout_gravity:用于设置该控件相对于父控件的对齐方式
padding与margin边距
- padding:用于设置该控件中内容相对于该控件的边距,即内边距。
- margin:用于设置该控件相对于其他控件的边距,即外边距。
weight
- layout_weight的值用于在线性布局中指定父控件剩余空间的分配比例。
第五节:UI基础控件
一、TextView
属性 ID
- @id引用设置好的ID
- @+id创建新的ID
属性background
- 设置颜色:“#00ff00”或“@color/gray”
- 设置图片:"@drawable/ic_launcher"
属性text
- 直接输入字符:"hello world"
- 引用strings文件:"@strings/title"推荐使用,不同语言版本翻译比较容易
属性 textSize
- 官方推荐使用sp单位,个人建议用dp,改变系统字体大小不会影响界面美观。
属性autoLink:设置文本类型
- none不设置
- web网页
- email邮箱
- phone电话
- map地图
- all全部
属性drawableLeft:文字左侧添加图片
属性lines="3"设置行数为3
属性ellipsize:文字超出显示范围时用省略号替换(需要配合lines属性)
- start
- middle
- end尾部显示...
- marquee跑马灯;需要设置其他属性 textIsSelectable="true";marqueeRepeatLimit="marquee_forever";singleLine=true;
属性textStyle:设置粗体bold
二、Button
实现监听器四种方式解析
- 创建成员内部类
- 创建匿名内部类
- Activity直接实现监听器接口
- 通过XML布局文件定义onClick属性
三、EditText
属性inputType:设置输入文本的类型,如textPassword密码
属性hint:提示信息
属性textColorHint:提示信息颜色
属性maxLength:文字多个的个数
四、ImageView
属性src="@drawable/cat"
属性scaleType:缩放类型
- center 图片比ImageView大,显示中间部分;图片比ImageView小,居中显示。
- centerCrop 不管图片大还是ImageView大,都居中填满整个ImageView。
- centerInside 图片比ImageView大,缩小图片保证完整显示;图片比ImageView小,居中显示。
- fitCenter 不管图片大还是ImageView大,图片完整显示,尽可能填满ImageView。
- fitStart 图片上边与ImageView上边对齐
- fitEnd图片下边与ImageView下边对齐
- fitXY
- Matrix
五、ImageButton
ImageView和Button的结合
六、CheckBox
XML属性checked="true";
事件监听器CompoundButton.OnCheckedChangeListener:选中或取消时触发
- public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) 参数1:被点击的CheckBox;参数1:是否选中状态
七、RadioButton/RadioGroup
RadioGroup包裹RadioButton
RadioGroup事件监听器RadioGroup.OnCheckedChangeListener:选择某个radioButton时触发
- public void onCheckedChanged(RadioGroup group, int checkedId) 参数1:当前RadioGroup控件;参数2:被点击的RadioButton的ID
八、ToggleButton 开关
XML属性textOff:关闭状态显示的文本
XML属性textOn:打开状态显示的文本
事件监听器OnClickListener
方法isChecked():是否打开状态
九、SeekBar 可拖拽进度条
事件监听器OnSeekBarChangeListener,三个抽象方法
- public void onStopTrackingTouch(SeekBar seekBar) 将在结束拖拽进度条时被触发
- public void onStartTrackingTouch(SeekBar seekBar) 将在开始拖拽进度条时被触发
- public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) 将在进度发生变化时被触发。参数 1、当前绑定的seekBar对象;参数2、当前进度数值;参数3、是否为用户手动触发
方法setMax(100):设置进度条最大值
方法setProgress(30):设置进度条当前值
十、ProgressBar 进度条
XML属性style:设置样式
- 默认:圆形
- style="?android:attr/progressBarStyleLarge" 大号圆形
- android:id="@+id/progressBar_small"小号圆形
- style="?android:attr/progressBarStyleHorizontal" 条形,进度确定,可设置次级进度条
incrementProgressBy(20):累加进度
incrementSecondaryProgressBy(40):累加次要进度
setMax(100):设置最大值
.setProgress(30):设置进度
setSecondaryProgress(40):设置次要进度
十一、RatingBar 评分进度条
XML属性isIndecator="false":允许用户手动更改进度。
XML属性numStarts="5":星星的个数。
XML属性stepSize="0.5":一次调整半颗星。
事件监听器OnRatingBarChangeListener:
- public void onRatingChanged(RatingBar ratingBar, float rating,boolean fromUser) 参数1:当前绑定的ratingBar对象;参数2:当前rating评分的进度;参数3:是否由用户触发
十二、Time/DatePicker
一、TimePicker
setIs24HourView(true):设置时间选择器为24小时制
setCurrentHour(Hour):设置时间选择器时间:小时
setCurrentMinute(Minute):设置时间选择器时间:分钟
事件监听器OnTimeChangedListener:
- public void onTimeChanged(TimePicker view, int hourOfDay, int minute) 当时间选择器发生改变时触发
二、DatePicker
datePicker.init(Year, Month, Day, new OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// 当日期选择器发生改变时,触发
System.out.println("From DatePicker : " + year + "/"
+ (monthOfYear + 1) + "/" + dayOfMonth);
setTitle("From DatePicker : " + year + "/" + (monthOfYear + 1)
+ "/" + dayOfMonth);
}
第六节:Activity管理
一、创建Activity过程
- 创建一个类继承自Activity。
- 重写onCreate方法,在方法中为类设置布局setContentView。
- 在manifest文件中注册Activity。
二、启动Activity
- 创建Intent意图对象
- 调用setClass设置要启动的Activity
- 调用startActivity进行跳转
三、BackStack回退栈
保存Activity的栈,每次打开的Activity都会压如栈中,按返回键会销毁栈中最顶层的Activity。