它们之间最大的区分是:速率的不同
Android是由安迪-鲁宾开发的,1开始只是1个作为智能相机的系统,随着手机市场的扩大转向手机操作系统。
Android名称:安迪-鲁宾非常喜欢1款游戏里面的1个大瓢虫。
Android的Logo来源 :要求无性别、种族轻视,设计师在上厕所时看到厕所门上的标识,产生的灵感。
几个比较稳定和重要的版本
版本 | API | 特性 |
---|---|---|
2.3.3 | 10 | 增加NFC支付功能,近场感应功能 |
3.0 | 11 | 专为平板电脑和大屏幕装备优化 |
4.1.2 | 16 |
注意:Dalvik VM:虚拟机,android代码运行在此虚拟机
.java
文件 ->编译为.class
文件 -> 打包成 .jar
文件(将java源码编译为class文件,然后将1组class打包成jar).java
文件 -> 编译为 .class
文件 -> 打包成.dex
文件 -> 打包成.apk
文件(将1组class编译为1个dex文件,然后有的平台为了更高的效力会将1个dex转换成odex文件,将N多个class文件编译为1个dex,这样履行效力会比较快,更合适在移动平台运行)请看下图,在JVM和DVM中不同的打包结构:
ART模式通过在安装利用程序时,自动对程序进行代码预读取编译,让程序直接编译成机器语言,免去了Dalvik模式要时时转换代码,实现高效力、省电、占用更低的系统内存、手机运行流畅。
但凡事总有正反两面,ART在解决了该问题的同时,同时也有如:会占用略高1些的存储空间、安装程序时要相比普通Dalvik模式要长1些时间来实现预编译。
ART模式是典型的以空间换时间的解决案例。
装备的常见分辨率
名称 | 分辨率 | 说明 |
---|---|---|
VGA | 480*640 | 标准的视频接口分辨率 |
QVGA | 240*320 | 只有VGA的4分之1 |
HVGA | 480*320 | 只有VGA的2分之1,使用的比较少了,开发使用 |
WVGA | 480*800 | |
FWVGAQ | 480:854 |
① drawable:图片资源
使用aapt(application android package tools)工具打包
编译 -> 打包 -> 签名 -> adb -> 部署得手机上
// 3. 找到edit控件
EditText et_number = (EditText) findViewById(R.id.et_number);
// 4. 获得到电话号码
String number = et_number.getText().toString().trim();
if (TextUtils.isEmpty(number)) {
// 土司
Toast.makeText(MainActivity.this, "不能为空", Toast.LENGTH_LONG)
.show();
return;
}
// 5. 拨打电话 底层原理:socket通讯
Intent intent = new Intent(); // 创建1个意图:想干甚么事
intent.setAction(Intent.ACTION_CALL);
// 6. 设置拨打电话的数据
// Uri 包括了 Url
intent.setData(Uri.parse("tel:" + number)); // Uri:统1资源标识符,Url:统1资源定位符
// 7.开启意图
startActivity(intent);
使用内部类实现OnClickListener接口来实现
private class MyButton implements OnClickListener {
@Override
public void onClick(View v) {
// 3. 找到edit控件
EditText et_number = (EditText) findViewById(R.id.et_number);
// 4. 获得到电话号码
String number = et_number.getText().toString().trim();
if (TextUtils.isEmpty(number)) {
// 土司
Toast.makeText(MainActivity.this, "不能为空", Toast.LENGTH_LONG)
.show();
return;
}
// 5. 拨打电话 底层原理:socket通讯
Intent intent = new Intent(); // 创建1个意图:想干甚么事
intent.setAction(Intent.ACTION_CALL);
// 6. 设置拨打电话的数据
// Uri 包括了 Url
intent.setData(Uri.parse("tel:" + number)); // Uri:统1资源标识符,Url:统1资源定位符
// 7.开启意图
startActivity(intent);
}
}
通过匿名内部类来实现
// 实现点击事件的第2种方式:匿名内部类
btn_call.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
callPhone();
}
});
由类文件去实现监听接口
public class MainActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 1. 找到按钮
Button btn1 = (Button) findViewById(R.id.button1);
Button btn2 = (Button) findViewById(R.id.button2);
Button btn3 = (Button) findViewById(R.id.button3);
Button btn4 = (Button) findViewById(R.id.button4);
Button btn5 = (Button) findViewById(R.id.button5);
// 设置点击事件的第3种方式
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
btn4.setOnClickListener(this);
btn5.setOnClickListener(this);
}
private void callPhone() {
// 3. 找到edit控件
EditText et_number = (EditText) findViewById(R.id.et_number);
// 4. 获得到电话号码
String number = et_number.getText().toString().trim();
// 5. 拨打电话 底层原理:socket通讯
Intent intent = new Intent(); // 创建1个意图:想干甚么事
intent.setAction(Intent.ACTION_CALL);
// 6. 设置拨打电话的数据
// Uri 包括了 Url
intent.setData(Uri.parse("tel:" + number)); // Uri:统1资源标识符,Url:统1资源定位符
// 7.开启意图
startActivity(intent);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
callPhone();
break;
case R.id.button2:
break;
case R.id.button3:
break;
case R.id.button4:
break;
case R.id.button5:
break;
default:
break;
}
}
}
在布局文件增加onclick属性,并在代码中添加对应的方法,并且传入View参数
在布局文件中注册点击事件
<Button
android:onClick="click"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/et_number"
android:layout_below="@+id/et_number"
android:layout_marginTop="32dp"
android:text="拨打" />
在代码中增加对应的方法
// 按钮的第4种点击事件,原理:利用的反射技术
// 第4种方式缺点:稀里糊涂
public void click(View v) {
callPhone();
}
RelativeLayout的经常使用属性有以下1些:
第1类:属性值为true或false
android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相对父元素完全居中
android:layout_alignParentBottom 贴紧父元素的下边沿
android:layout_alignParentLeft 贴紧父元素的左侧缘
android:layout_alignParentRight 贴紧父元素的右侧缘
android:layout_alignParentTop 贴紧父元素的上边沿
第2类:属性值必须为id的援用名“@id/id-name”
android:layout_below 在某元素的下方
android:layout_above 在某元素的的上方
android:layout_toLeftOf 在某元素的左侧
android:layout_toRightOf 在某元素的右侧
android:layout_alignTop 本元素的上边沿和某元素的的上边沿对齐
android:layout_alignLeft 本元素的左侧缘和某元素的的左侧缘对齐
android:layout_alignBottom 本元素的下边沿和某元素的的下边沿对齐
android:layout_alignRight 本元素的右侧缘和某元素的的右侧缘对齐
第3类:属性值为具体的像素值
android:layout_marginBottom 离某元素底边沿的距离
android:layout_marginLeft 离某元素左侧缘的距离
android:layout_marginRight 离某元素右侧缘的距离
android:layout_marginTop 离某元素上边沿的距离
在框架布局中,经常使用的属性有以下几项:
android:top 将视图放到屏幕的顶端
android:Buttom 将视图放到屏幕的低端
android:Left 将视图放到屏幕的左端
android:Right 将视图放到屏幕的右端
android:Center_vertical 将视图依照垂直方向居中显示
android:Center_horizontal 将视图依照水平方向居中显示