它們之間最大的區(qū)分是:速率的不同
Android是由安迪-魯賓開發(fā)的,1開始只是1個(gè)作為智能相機(jī)的系統(tǒng),隨著手機(jī)市場(chǎng)的擴(kuò)大轉(zhuǎn)向手機(jī)操作系統(tǒng)。
Android名稱:安迪-魯賓非常喜歡1款游戲里面的1個(gè)大瓢蟲。
Android的Logo來(lái)源 :要求無(wú)性別、種族輕視,設(shè)計(jì)師在上廁所時(shí)看到廁所門上的標(biāo)識(shí),產(chǎn)生的靈感。
幾個(gè)比較穩(wěn)定和重要的版本
版本 | API | 特性 |
---|---|---|
2.3.3 | 10 | 增加NFC支付功能,近場(chǎng)感應(yīng)功能 |
3.0 | 11 | 專為平板電腦和大屏幕裝備優(yōu)化 |
4.1.2 | 16 |
注意:Dalvik VM:虛擬機(jī),android代碼運(yùn)行在此虛擬機(jī)
.java
文件 ->編譯為.class
文件 -> 打包成 .jar
文件(將java源碼編譯為class文件,然后將1組class打包成jar).java
文件 -> 編譯為 .class
文件 -> 打包成.dex
文件 -> 打包成.apk
文件(將1組class編譯為1個(gè)dex文件,然后有的平臺(tái)為了更高的效力會(huì)將1個(gè)dex轉(zhuǎn)換成odex文件,將N多個(gè)class文件編譯為1個(gè)dex,這樣履行效力會(huì)比較快,更合適在移動(dòng)平臺(tái)運(yùn)行)請(qǐng)看下圖,在JVM和DVM中不同的打包結(jié)構(gòu):
ART模式通過(guò)在安裝利用程序時(shí),自動(dòng)對(duì)程序進(jìn)行代碼預(yù)讀取編譯,讓程序直接編譯成機(jī)器語(yǔ)言,免去了Dalvik模式要時(shí)時(shí)轉(zhuǎn)換代碼,實(shí)現(xiàn)高效力、省電、占用更低的系統(tǒng)內(nèi)存、手機(jī)運(yùn)行流暢。
但凡事總有正反兩面,ART在解決了該問(wèn)題的同時(shí),同時(shí)也有如:會(huì)占用略高1些的存儲(chǔ)空間、安裝程序時(shí)要相比普通Dalvik模式要長(zhǎng)1些時(shí)間來(lái)實(shí)現(xiàn)預(yù)編譯。
ART模式是典型的以空間換時(shí)間的解決案例。
裝備的常見分辨率
名稱 | 分辨率 | 說(shuō)明 |
---|---|---|
VGA | 480*640 | 標(biāo)準(zhǔn)的視頻接口分辨率 |
QVGA | 240*320 | 只有VGA的4分之1 |
HVGA | 480*320 | 只有VGA的2分之1,使用的比較少了,開發(fā)使用 |
WVGA | 480*800 | |
FWVGAQ | 480:854 |
① drawable:圖片資源
使用aapt(application android package tools)工具打包
編譯 -> 打包 -> 簽名 -> adb -> 部署得手機(jī)上
// 3. 找到edit控件
EditText et_number = (EditText) findViewById(R.id.et_number);
// 4. 獲得到電話號(hào)碼
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(); // 創(chuàng)建1個(gè)意圖:想干甚么事
intent.setAction(Intent.ACTION_CALL);
// 6. 設(shè)置撥打電話的數(shù)據(jù)
// Uri 包括了 Url
intent.setData(Uri.parse("tel:" + number)); // Uri:統(tǒng)1資源標(biāo)識(shí)符,Url:統(tǒng)1資源定位符
// 7.開啟意圖
startActivity(intent);
使用內(nèi)部類實(shí)現(xiàn)OnClickListener接口來(lái)實(shí)現(xiàn)
private class MyButton implements OnClickListener {
@Override
public void onClick(View v) {
// 3. 找到edit控件
EditText et_number = (EditText) findViewById(R.id.et_number);
// 4. 獲得到電話號(hào)碼
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(); // 創(chuàng)建1個(gè)意圖:想干甚么事
intent.setAction(Intent.ACTION_CALL);
// 6. 設(shè)置撥打電話的數(shù)據(jù)
// Uri 包括了 Url
intent.setData(Uri.parse("tel:" + number)); // Uri:統(tǒng)1資源標(biāo)識(shí)符,Url:統(tǒng)1資源定位符
// 7.開啟意圖
startActivity(intent);
}
}
通過(guò)匿名內(nèi)部類來(lái)實(shí)現(xiàn)
// 實(shí)現(xiàn)點(diǎn)擊事件的第2種方式:匿名內(nèi)部類
btn_call.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
callPhone();
}
});
由類文件去實(shí)現(xiàn)監(jiān)聽接口
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);
// 設(shè)置點(diǎn)擊事件的第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. 獲得到電話號(hào)碼
String number = et_number.getText().toString().trim();
// 5. 撥打電話 底層原理:socket通訊
Intent intent = new Intent(); // 創(chuàng)建1個(gè)意圖:想干甚么事
intent.setAction(Intent.ACTION_CALL);
// 6. 設(shè)置撥打電話的數(shù)據(jù)
// Uri 包括了 Url
intent.setData(Uri.parse("tel:" + number)); // Uri:統(tǒng)1資源標(biāo)識(shí)符,Url:統(tǒng)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屬性,并在代碼中添加對(duì)應(yīng)的方法,并且傳入View參數(shù)
在布局文件中注冊(cè)點(diǎn)擊事件
<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="撥打" />
在代碼中增加對(duì)應(yīng)的方法
// 按鈕的第4種點(diǎn)擊事件,原理:利用的反射技術(shù)
// 第4種方式缺點(diǎn):稀里糊涂
public void click(View v) {
callPhone();
}
RelativeLayout的經(jīng)常使用屬性有以下1些:
第1類:屬性值為true或false
android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相對(duì)父元素完全居中
android:layout_alignParentBottom 貼緊父元素的下邊沿
android:layout_alignParentLeft 貼緊父元素的左側(cè)緣
android:layout_alignParentRight 貼緊父元素的右側(cè)緣
android:layout_alignParentTop 貼緊父元素的上邊沿
第2類:屬性值必須為id的援用名“@id/id-name”
android:layout_below 在某元素的下方
android:layout_above 在某元素的的上方
android:layout_toLeftOf 在某元素的左側(cè)
android:layout_toRightOf 在某元素的右側(cè)
android:layout_alignTop 本元素的上邊沿和某元素的的上邊沿對(duì)齊
android:layout_alignLeft 本元素的左側(cè)緣和某元素的的左側(cè)緣對(duì)齊
android:layout_alignBottom 本元素的下邊沿和某元素的的下邊沿對(duì)齊
android:layout_alignRight 本元素的右側(cè)緣和某元素的的右側(cè)緣對(duì)齊
第3類:屬性值為具體的像素值
android:layout_marginBottom 離某元素底邊沿的距離
android:layout_marginLeft 離某元素左側(cè)緣的距離
android:layout_marginRight 離某元素右側(cè)緣的距離
android:layout_marginTop 離某元素上邊沿的距離
在框架布局中,經(jīng)常使用的屬性有以下幾項(xiàng):
android:top 將視圖放到屏幕的頂端
android:Buttom 將視圖放到屏幕的低端
android:Left 將視圖放到屏幕的左端
android:Right 將視圖放到屏幕的右端
android:Center_vertical 將視圖依照垂直方向居中顯示
android:Center_horizontal 將視圖依照水平方向居中顯示