## 本節(jié)引言:
本節(jié)開始講解Android的四大組件之一的Activity(活動),先來看下官方對于Activity的介紹: PS:官網(wǎng)文檔:[Activity](http://androiddoc.qiniudn.com/guide/components/activities.html)
**介紹如下:**??**大概意思:**
> Activity是一個應(yīng)用程序的組件,他在屏幕上提供了一個區(qū)域,允許用戶在上面做一些交互性的操作, 比如打電話,照相,發(fā)送郵件,或者顯示一個地圖!Activity可以理解成一個繪制用戶界面的窗口, 而這個窗口可以填滿整個屏幕,也可能比屏幕小或者浮動在其他窗口的上方!
從上面這段話,我們可以得到以下信息:
> **1.**?Activity用于顯示用戶界面,用戶通過Activity交互完成相關(guān)操作?**2.**?一個App允許有多個Activity
好了,大概的引言就介紹到這里,想深入了解可以繼續(xù)看API,開始本節(jié)內(nèi)容~
* * *
## 1.Activity的概念與Activity的生命周期圖:

**注意事項(xiàng):**
> **1.**?**onPause()和onStop()被調(diào)用的前提是**: 打開了一個新的Activity!而前者是舊Activity還可見的狀態(tài);后者是舊Activity已經(jīng)不可見!
> 2\. 另外,親測:AlertDialog和PopWindow是不會觸發(fā)上述兩個回調(diào)方法的~
* * *
## 2.Activity/ActionBarActivity/AppCompatActivity的區(qū)別:
> 在開始講解創(chuàng)建Activity之前要說下這三個的一個區(qū)別: Activity就不用說啦,后面這兩個都是為了低版本兼容而提出的提出來的,他們都在v7包下, ActionBarActivity已被廢棄,從名字就知道,ActionBar~,而在5.0后,被Google棄用了,現(xiàn)在用 ToolBar...而我們現(xiàn)在在Android Studio創(chuàng)建一個Activity默認(rèn)繼承的會是:AppCompatActivity! 當(dāng)然你也可以只寫Activity,不過AppCompatActivity給我們提供了一些新的東西而已! 兩個選一個,Just you like~
* * *
## 3.Activity的創(chuàng)建流程

**PS:**
> 好了,上面也說過,可以繼承Activity和AppCompatActivity,只不過后者提供了一些新的東西而已! 另外,切記,Android中的四大組件,只要你定義了,無論你用沒用,都要在AndroidManifest.xml對 這個組件進(jìn)行聲明,不然運(yùn)行時程序會直接退出,報(bào)ClassNotFindException...
* * *
## 4.onCreate()一個參數(shù)和兩個參數(shù)的區(qū)別:
相信用as的朋友在重寫Act的onCreate()方法時會發(fā)現(xiàn),這玩意有兩個參數(shù):

可是正常的才只有一個參數(shù)啊:

恩呢,這就是5.0給我們提供的新的方法,要用它,先要在配置文件中為我們的Activity設(shè)置一個屬性:
~~~
android:persistableMode="persistAcrossReboots"
~~~
然后我們的Activity就擁有了持久化的能力了,一般我們會搭配另外兩個方法來使用:
~~~
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState)
~~~
相信有些朋友對這兩個方法名不陌生吧,前一個方法會在下述情形中被調(diào)用:
> 1. 點(diǎn)擊home鍵回到主頁或長按后選擇運(yùn)行其他程序
> 2. 按下電源鍵關(guān)閉屏幕
> 3. 啟動新的Activity
> 4. 橫豎屏切換時,肯定會執(zhí)行,因?yàn)闄M豎屏切換的時候會先銷毀Act,然后再重新創(chuàng)建 重要原則:當(dāng)系統(tǒng)"未經(jīng)你許可"時銷毀了你的activity,則onSaveInstanceState會被系統(tǒng)調(diào)用, 這是系統(tǒng)的責(zé)任,因?yàn)樗仨氁峁┮粋€機(jī)會讓你保存你的數(shù)據(jù)(你可以保存也可以不保存)。
而后一個方法,和onCreate同樣可以從取出前者保存的數(shù)據(jù): 一般是在onStart()和onResume()之間執(zhí)行! 之所以有兩個可以獲取到保存數(shù)據(jù)的方法,是為了避免Act跳轉(zhuǎn)而沒有關(guān)閉, 然后不走onCreate()方法,而你又想取出保存數(shù)據(jù)~
**說回來:**?說回這個Activity擁有了持久化的能力,增加的這個PersistableBundle參數(shù)令這些方法 擁有了系統(tǒng)**關(guān)機(jī)后重啟**的數(shù)據(jù)恢復(fù)能力??!而且不影響我們其他的序列化操作,臥槽, 具體怎么實(shí)現(xiàn)的,暫時還不了解,可能是另外弄了個文件保存吧~!后面知道原理的話會告知下大家! 另外,API版本需要>=21,就是要5.0以上的版本才有效~
* * *
## 4.啟動一個Activity的幾種方式
> 在Android中我們可以通過下面兩種方式來啟動一個新的Activity,注意這里是怎么啟動,而非 啟動模式??!分為顯示啟動和隱式啟動!
**1\. 顯式啟動:通過包名來啟動,寫法如下:**
> **①最常見的:**
>
> ~~~
> startActivity(new Intent(當(dāng)前Act.this,要啟動的Act.class));
> ~~~
>
> **②通過Intent的ComponentName:**
>
> ~~~
> ComponentName cn = new ComponentName("當(dāng)前Act的全限定類名","啟動Act的全限定類名") ;
> Intent intent = new Intent() ;
> intent.setComponent(cn) ;
> startActivity(intent) ;
> ~~~
>
> ③**初始化Intent時指定包名:**
>
> ~~~
> Intent intent = new Intent("android.intent.action.MAIN");
> intent.setClassName("當(dāng)前Act的全限定類名","啟動Act的全限定類名");
> startActivity(intent);
> ~~~
**2.隱式啟動:通過Intent-filter的Action,Category或data來實(shí)現(xiàn) 這個是通過Intent的?**intent-filter**來實(shí)現(xiàn)的,這個Intent那章會詳細(xì)講解! 這里知道個大概就可以了!

**3\. 另外還有一個直接通過包名啟動apk的:**
~~~
Intent intent = getPackageManager().getLaunchIntentForPackage
("apk第一個啟動的Activity的全限定類名") ;
if(intent != null) startActivity(intent) ;
~~~
* * *
## 5.橫豎屏切換與狀態(tài)保存的問題
> 前面也也說到了App橫豎屏切換的時候會銷毀當(dāng)前的Activity然后重新創(chuàng)建一個,你可以自行在生命周期 的每個方法里都添加打印Log的語句,來進(jìn)行判斷,又或者設(shè)一個按鈕一個TextView點(diǎn)擊按鈕后,修改TextView 文本,然后橫豎屏切換,會神奇的發(fā)現(xiàn)TextView文本變回之前的內(nèi)容了! 橫豎屏切換時Act走下述生命周期:
> **onPause-> onStop-> onDestory-> onCreate->onStart->onResume**
> 關(guān)于橫豎屏切換可能遇到下述問題:
* * *
1.先說下如何**禁止屏幕橫豎屏自動切換**吧,很簡單,在AndroidManifest.xml中為Act添加一個屬性:**android:screenOrientation**, 有下述可選值:
* **unspecified**:默認(rèn)值 由系統(tǒng)來判斷顯示方向.判定的策略是和設(shè)備相關(guān)的,所以不同的設(shè)備會有不同的顯示方向。
* **landscape**:橫屏顯示(寬比高要長)
* **portrait**:豎屏顯示(高比寬要長)
* **user**:用戶當(dāng)前首選的方向
* **behind**:和該Activity下面的那個Activity的方向一致(在Activity堆棧中的)
* **sensor**:有物理的感應(yīng)器來決定。如果用戶旋轉(zhuǎn)設(shè)備這屏幕會橫豎屏切換。
* **nosensor**:忽略物理感應(yīng)器,這樣就不會隨著用戶旋轉(zhuǎn)設(shè)備而更改了("unspecified"設(shè)置除外)。
* * *
2.**橫豎屏?xí)r想加載不同的布局**:
1)準(zhǔn)備兩套不同的布局,Android會自己根據(jù)橫豎屏加載不同布局: 創(chuàng)建兩個布局文件夾:**layout-land**橫屏,**layout-port**豎屏 然后把這兩套布局文件丟這兩文件夾里,文件名一樣,Android就會自行判斷,然后加載相應(yīng)布局了!
2 )自己在代碼中進(jìn)行判斷,自己想加載什么就加載什么:
我們一般是在onCreate()方法中加載布局文件的,我們可以在這里對橫豎屏的狀態(tài)做下判斷,關(guān)鍵代碼如下:
~~~
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
setContentView(R.layout.橫屏);
}
else if (this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {
setContentView(R.layout.豎屏);
}
~~~
* * *
**3\. 如何讓模擬器橫豎屏切換**
如果你的模擬器是GM的話。直接按模擬器上的切換按鈕即可,原生模擬器可按ctrl + f11/f12切換!
* * *
**4\. 狀態(tài)保存問題:**
這個上面也說過了,通過一個Bundle savedInstanceState參數(shù)即可完成! 三個核心方法:
* * *
~~~
onCreate(Bundle savedInstanceState);
onSaveInstanceState(Bundle outState);
onRestoreInstanceState(Bundle savedInstanceState);
~~~
你只重寫onSaveInstanceState()方法,往這個bundle中寫入數(shù)據(jù),比如:
> outState.putInt("num",1);
這樣,然后你在onCreate或者onRestoreInstanceState中就可以拿出里面存儲的數(shù)據(jù),不過拿之前要判斷下是否為null哦!
> savedInstanceState.getInt("num");
然后想干嘛就干嘛~
* * *
## 6.系統(tǒng)給我們提供的常見的Activity
好的,最后給大家附上一些系統(tǒng)給我們提供的一些常見的Activtiy吧!
~~~
//1.撥打電話
// 給移動客服10086撥打電話
Uri uri = Uri.parse("tel:10086");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);
//2.發(fā)送短信
// 給10086發(fā)送內(nèi)容為“Hello”的短信
Uri uri = Uri.parse("smsto:10086");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "Hello");
startActivity(intent);
//3.發(fā)送彩信(相當(dāng)于發(fā)送帶附件的短信)
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra("sms_body", "Hello");
Uri uri = Uri.parse("content://media/external/images/media/23");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setType("image/png");
startActivity(intent);
//4.打開瀏覽器:
// 打開Google主頁
Uri uri = Uri.parse("http://www.baidu.com");
Intent intent? = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
//5.發(fā)送電子郵件:(閹割了Google服務(wù)的沒戲!!!!)
// 給someone@domain.com發(fā)郵件
Uri uri = Uri.parse("mailto:someone@domain.com");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(intent);
// 給someone@domain.com發(fā)郵件發(fā)送內(nèi)容為“Hello”的郵件
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, "someone@domain.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Hello");
intent.setType("text/plain");
startActivity(intent);
// 給多人發(fā)郵件
Intent intent=new Intent(Intent.ACTION_SEND);
String[] tos = {"1@abc.com", "2@abc.com"}; // 收件人
String[] ccs = {"3@abc.com", "4@abc.com"}; // 抄送
String[] bccs = {"5@abc.com", "6@abc.com"}; // 密送
intent.putExtra(Intent.EXTRA_EMAIL, tos);
intent.putExtra(Intent.EXTRA_CC, ccs);
intent.putExtra(Intent.EXTRA_BCC, bccs);
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Hello");
intent.setType("message/rfc822");
startActivity(intent);
//6.顯示地圖:
// 打開Google地圖中國北京位置(北緯39.9,東經(jīng)116.3)
Uri uri = Uri.parse("geo:39.9,116.3");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
//7.路徑規(guī)劃
// 路徑規(guī)劃:從北京某地(北緯39.9,東經(jīng)116.3)到上海某地(北緯31.2,東經(jīng)121.4)
Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=39.9 116.3&daddr=31.2 121.4");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
//8.多媒體播放:
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/foo.mp3");
intent.setDataAndType(uri, "audio/mp3");
startActivity(intent);
//獲取SD卡下所有音頻文件,然后播放第一首=-=?
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
//9.打開攝像頭拍照:
// 打開拍照程序
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
// 取出照片數(shù)據(jù)
Bundle extras = intent.getExtras();
Bitmap bitmap = (Bitmap) extras.get("data");
//另一種:
//調(diào)用系統(tǒng)相機(jī)應(yīng)用程序,并存儲拍下來的照片
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
time = Calendar.getInstance().getTimeInMillis();
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
.getExternalStorageDirectory().getAbsolutePath()+"/tucue", time + ".jpg")));
startActivityForResult(intent, ACTIVITY_GET_CAMERA_IMAGE);
//10.獲取并剪切圖片
// 獲取并剪切圖片
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra("crop", "true"); // 開啟剪切
intent.putExtra("aspectX", 1); // 剪切的寬高比為1:2
intent.putExtra("aspectY", 2);
intent.putExtra("outputX", 20); // 保存圖片的寬和高
intent.putExtra("outputY", 40);
intent.putExtra("output", Uri.fromFile(new File("/mnt/sdcard/temp"))); // 保存路徑
intent.putExtra("outputFormat", "JPEG");// 返回格式
startActivityForResult(intent, 0);
// 剪切特定圖片
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");
intent.setData(Uri.fromFile(new File("/mnt/sdcard/temp")));
intent.putExtra("outputX", 1); // 剪切的寬高比為1:2
intent.putExtra("outputY", 2);
intent.putExtra("aspectX", 20); // 保存圖片的寬和高
intent.putExtra("aspectY", 40);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection", true);
intent.putExtra("output", Uri.parse("file:///mnt/sdcard/temp"));
startActivityForResult(intent, 0);
//11.打開Google Market
// 打開Google Market直接進(jìn)入該程序的詳細(xì)頁面
Uri uri = Uri.parse("market://details?id=" + "com.demo.app");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
//12.進(jìn)入手機(jī)設(shè)置界面:
// 進(jìn)入無線網(wǎng)絡(luò)設(shè)置界面(其它可以舉一反三)?
Intent intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);?
startActivityForResult(intent, 0);
//13.安裝apk:
Uri installUri = Uri.fromParts("package", "xxx", null);
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);
//14.卸載apk:
Uri uri = Uri.fromParts("package", strPackageName, null);
Intent it = new Intent(Intent.ACTION_DELETE, uri);
startActivity(it);
//15.發(fā)送附件:
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/eoe.mp3");
sendIntent.setType("audio/mp3");
startActivity(Intent.createChooser(it, "Choose Email Client"));
//16.進(jìn)入聯(lián)系人頁面:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(People.CONTENT_URI);
startActivity(intent);
//17.查看指定聯(lián)系人:
Uri personUri = ContentUris.withAppendedId(People.CONTENT_URI, info.id);//info.id聯(lián)系人ID
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(personUri);
startActivity(intent);
~~~
* * *
## 本節(jié)小結(jié):
> 好吧,寫著寫著就不像入門教程了,哈哈,不過學(xué)多點(diǎn)沒事的,本節(jié)初窺門徑就到這里吧~下節(jié)我們會繼續(xù)來研究這個Activity,比如數(shù)據(jù)傳遞,啟動模式等~敬請期待~
- 第一章——環(huán)境搭建和開發(fā)相關(guān)
- 1.0 Android基礎(chǔ)入門教程
- 1.1 背景相關(guān)與系統(tǒng)架構(gòu)分析
- 1.2 開發(fā)環(huán)境搭建
- 1.2.1 使用Eclipse + ADT + SDK開發(fā)Android APP
- 1.2.2 使用Android Studio開發(fā)Android APP
- 1.3 SDK更新不了問題解決
- 1.4 Genymotion模擬器安裝
- 1.5 GIT教程
- 1.5.1 Git使用教程之本地倉庫的基本操作
- 1.5.2 Git之使用GitHub搭建遠(yuǎn)程倉庫
- 1.6 .9(九妹)圖片怎么玩
- 1.7 界面原型設(shè)計(jì)
- 1.8 工程相關(guān)解析(各種文件,資源訪問)
- 1.9 Android程序簽名打包
- 1.11 反編譯APK獲取代碼&資源
- 第二章——Android中的UI組件的詳解
- 2.1 View與ViewGroup的概念
- 2.2 布局
- 2.2.1 LinearLayout(線性布局)
- 2.2.2 RelativeLayout(相對布局)
- 2.2.3 TableLayout(表格布局)
- 2.2.4 FrameLayout(幀布局)
- 2.2.5 GridLayout(網(wǎng)格布局)
- 2.2.6 AbsoluteLayout(絕對布局)
- 2.3 表單
- 2.3.1 TextView(文本框)詳解
- 2.3.2 EditText(輸入框)詳解
- 2.3.3 Button(按鈕)與ImageButton(圖像按鈕)
- 2.3.4 ImageView(圖像視圖)
- 2.3.5.RadioButton(單選按鈕)&Checkbox(復(fù)選框)
- 2.3.6 開關(guān)按鈕ToggleButton和開關(guān)Switch
- 2.3.7 ProgressBar(進(jìn)度條)
- 2.3.8 SeekBar(拖動條)
- 2.3.9 RatingBar(星級評分條)
- 2.4 控件
- 2.4.1 ScrollView(滾動條)
- 2.4.2 Date & Time組件(上)
- 2.4.3 Date & Time組件(下)
- 2.4.4 Adapter基礎(chǔ)講解
- 2.4.5 ListView簡單實(shí)用
- 2.4.6 BaseAdapter優(yōu)化
- 2.4.7ListView的焦點(diǎn)問題
- 2.4.8 ListView之checkbox錯位問題解決
- 2.4.9 ListView的數(shù)據(jù)更新問題
- 2.5 Adapter類控件
- 2.5.0 構(gòu)建一個可復(fù)用的自定義BaseAdapter
- 2.5.1 ListView Item多布局的實(shí)現(xiàn)
- 2.5.2 GridView(網(wǎng)格視圖)的基本使用
- 2.5.3 Spinner(列表選項(xiàng)框)的基本使用
- 2.5.4 AutoCompleteTextView(自動完成文本框)的基本使用
- 2.5.5 ExpandableListView(可折疊列表)的基本使用
- 2.5.6 ViewFlipper(翻轉(zhuǎn)視圖)的基本使用
- 2.5.7 Toast(吐司)的基本使用
- 2.5.8 Notification(狀態(tài)欄通知)詳解
- 2.5.9 AlertDialog(對話框)詳解
- 2.6 對話框控件
- 2.6.0 其他幾種常用對話框基本使用
- 2.6.1 PopupWindow(懸浮框)的基本使用
- 2.6.2 菜單(Menu)
- 2.6.3 ViewPager的簡單使用
- 2.6.4 DrawerLayout(官方側(cè)滑菜單)的簡單使用
- 第三章——Android的事件處理機(jī)制
- 3.1.1 基于監(jiān)聽的事件處理機(jī)制
- 3.2 基于回調(diào)的事件處理機(jī)制
- 3.3 Handler消息傳遞機(jī)制淺析
- 3.4 TouchListener PK OnTouchEvent + 多點(diǎn)觸碰
- 3.5 監(jiān)聽EditText的內(nèi)容變化
- 3.6 響應(yīng)系統(tǒng)設(shè)置的事件(Configuration類)
- 3.7 AnsyncTask異步任務(wù)
- 3.8 Gestures(手勢)
- 第四章——Android的四大組件
- 4.1.1 Activity初學(xué)乍練
- 4.1.2 Activity初窺門徑
- 4.1.3 Activity登堂入室
- 4.2.1 Service初涉
- 4.2.2 Service進(jìn)階
- 4.2.3 Service精通
- 4.3.1 BroadcastReceiver牛刀小試
- 4.3.2 BroadcastReceiver庖丁解牛
- 4.4.1 ContentProvider初探
- 4.4.2 ContentProvider再探——Document Provider
- 4.5.1 Intent的基本使用
- 4.5.2 Intent之復(fù)雜數(shù)據(jù)的傳遞
- 第五章——Fragment(碎片)
- 5.1 Fragment基本概述
- 5.2.1 Fragment實(shí)例精講——底部導(dǎo)航欄的實(shí)現(xiàn)(方法1)
- 5.2.2 Fragment實(shí)例精講——底部導(dǎo)航欄的實(shí)現(xiàn)(方法2)
- 5.2.3 Fragment實(shí)例精講——底部導(dǎo)航欄的實(shí)現(xiàn)(方法3)
- 5.2.4 Fragment實(shí)例精講——底部導(dǎo)航欄+ViewPager滑動切換頁面
- 5.2.5 Fragment實(shí)例精講——新聞(購物)類App列表Fragment的簡單實(shí)現(xiàn)
- 第六章——Android數(shù)據(jù)存儲與訪問
- 6.1 數(shù)據(jù)存儲與訪問之——文件存儲讀寫
- 6.2 數(shù)據(jù)存儲與訪問之——SharedPreferences保存用戶偏好參數(shù)
- 6.3.1 數(shù)據(jù)存儲與訪問之——初見SQLite數(shù)據(jù)庫
- 6.3.2 數(shù)據(jù)存儲與訪問之——又見SQLite數(shù)據(jù)庫
- 第七章——Android網(wǎng)絡(luò)編程
- 7.1.1 Android網(wǎng)絡(luò)編程要學(xué)的東西與Http協(xié)議學(xué)習(xí)
- 7.1.2 Android Http請求頭與響應(yīng)頭的學(xué)習(xí)
- 7.1.3 Android HTTP請求方式:HttpURLConnection
- 7.1.4 Android HTTP請求方式:HttpClient
- 7.2.1 Android XML數(shù)據(jù)解析
- 7.2.2 Android JSON數(shù)據(jù)解析
- 7.3.1 Android 文件上傳
- 7.3.2 Android 文件下載(1)
- 7.3.3 Android 文件下載(2)
- 7.4 Android 調(diào)用 WebService
- 7.5.1 WebView(網(wǎng)頁視圖)基本用法
- 7.5.2 WebView和JavaScrip交互基礎(chǔ)
- 7.5.3 Android 4.4后WebView的一些注意事項(xiàng)
- 7.5.4 WebView文件下載
- 7.5.5 WebView緩存問題
- 7.5.6 WebView處理網(wǎng)頁返回的錯誤碼信息
- 7.6.1 Socket學(xué)習(xí)網(wǎng)絡(luò)基礎(chǔ)準(zhǔn)備
- 7.6.2 基于TCP協(xié)議的Socket通信(1)
- 7.6.3 基于TCP協(xié)議的Socket通信(2)
- 7.6.4 基于UDP協(xié)議的Socket通信
- 第八章——Android繪圖與動畫基礎(chǔ)
- 8.1.1 Android中的13種Drawable小結(jié) Part 1
- 8.1.2 Android中的13種Drawable小結(jié) Part 2
- 8.1.3 Android中的13種Drawable小結(jié) Part 3
- 8.2.1 Bitmap(位圖)全解析 Part 1
- 8.2.2 Bitmap引起的OOM問題
- 8.3.1 三個繪圖工具類詳解
- 8.3.2 繪圖類實(shí)戰(zhàn)示例
- 8.3.3 Paint API之—— MaskFilter(面具)
- 8.3.4 Paint API之—— Xfermode與PorterDuff詳解(一)
- 8.3.5 Paint API之—— Xfermode與PorterDuff詳解(二)
- 8.3.6 Paint API之—— Xfermode與PorterDuff詳解(三)
- 8.3.7 Paint API之—— Xfermode與PorterDuff詳解(四)
- 8.3.8 Paint API之—— Xfermode與PorterDuff詳解(五)
- 8.3.9 Paint API之—— ColorFilter(顏色過濾器)(1/3)
- 8.3.10 Paint API之—— ColorFilter(顏色過濾器)(2-3)
- 8.3.11 Paint API之—— ColorFilter(顏色過濾器)(3-3)
- 8.3.12 Paint API之—— PathEffect(路徑效果)
- 8.3.13 Paint API之—— Shader(圖像渲染)
- 8.3.14 Paint幾個枚舉/常量值以及ShadowLayer陰影效果
- 8.3.15 Paint API之——Typeface(字型)
- 8.3.16 Canvas API詳解(Part 1)
- 8.3.17 Canvas API詳解(Part 2)剪切方法合集
- 8.3.18 Canvas API詳解(Part 3)Matrix和drawBitmapMash
- 8.4.1 Android動畫合集之幀動畫
- 8.4.2 Android動畫合集之補(bǔ)間動畫
- 8.4.3 Android動畫合集之屬性動畫-初見
- 8.4.4 Android動畫合集之屬性動畫-又見
- 第九章——Android中的多媒體開發(fā)
- 9.1 使用SoundPool播放音效(Duang~)
- 9.2 MediaPlayer播放音頻與視頻
- 9.3 使用Camera拍照
- 9.4 使用MediaRecord錄音
- 第十章——系統(tǒng)服務(wù)
- 10.1 TelephonyManager(電話管理器)
- 10.2 SmsManager(短信管理器)
- 10.3 AudioManager(音頻管理器)
- 10.4 Vibrator(振動器)
- 10.5 AlarmManager(鬧鐘服務(wù))
- 10.6 PowerManager(電源服務(wù))
- 10.7 WindowManager(窗口管理服務(wù))
- 10.8 LayoutInflater(布局服務(wù))
- 10.9 WallpaperManager(壁紙管理器)
- 10.10 傳感器專題(1)——相關(guān)介紹
- 10.11 傳感器專題(2)——方向傳感器
- 10.12 傳感器專題(3)——加速度/陀螺儀傳感器
- 10.12 傳感器專題(4)——其他傳感器了解
- 10.14 Android GPS初涉
- 第十一章——由來、答疑和資源
- 11.0《2015最新Android基礎(chǔ)入門教程》完結(jié)散花~
