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():進度條增加或者減少,正增負減