剛剛注冊(cè)簡(jiǎn)書(shū),在這里記錄一下自己學(xué)習(xí)Android的過(guò)程。
開(kāi)啟Android開(kāi)發(fā)之旅
要想開(kāi)發(fā)一個(gè)Android App,開(kāi)發(fā)環(huán)境是必不可少的,所以學(xué)習(xí)之前應(yīng)該先搭建環(huán)境,環(huán)境如下:
- JDK + Android SDK(配置環(huán)境變量)
- 開(kāi)發(fā)環(huán)境:Android Studio + Genymotion
- 平臺(tái)環(huán)境:Mac/ Linux/ Windows
創(chuàng)建新的工程
環(huán)境搭建好后,就可以創(chuàng)建一個(gè)新的工程來(lái)體開(kāi)啟Android開(kāi)發(fā)之旅了。
第一步:輸入應(yīng)用程序名稱,域名,以及存儲(chǔ)路徑。
第二步:選擇該應(yīng)用程序最低適配SDK版本。
第三步:選擇Activity類型。
第四步:輸入主活動(dòng)名稱以及主活動(dòng)布局文件名稱。
Finish,一個(gè)工程就創(chuàng)建好了。
Activity必須知道的那些事
Activity是四大組件之一,通常一個(gè)用戶交互界面對(duì)應(yīng)一個(gè)Activity。
Activity的生命周期
這些方法兩兩對(duì)應(yīng):
- onCreate創(chuàng)建與onDestroy銷毀。
- onStart可見(jiàn)與onStop不可見(jiàn)。
- onResume可編輯(即焦點(diǎn))與onPause。
- 當(dāng)Activity被onStop后,但是沒(méi)有onDestroy,在再次啟動(dòng)此Activity時(shí)調(diào)用onRestart(而不再調(diào)用onCreate)方法。
Activity間傳遞數(shù)據(jù)
Activity之間傳遞數(shù)據(jù)有兩種方法:
- startActivity(intent):打開(kāi)另一個(gè)Activity,同時(shí)向開(kāi)啟的界面Activity傳遞數(shù)據(jù)。
- startActivityForResult(intent):打開(kāi)另一個(gè)Activit,同時(shí)向開(kāi)啟的Activity傳遞數(shù)據(jù),并回傳數(shù)據(jù)。
Activity之間也可以傳遞對(duì)象,傳遞的對(duì)象需要進(jìn)行序列化。
多姿多彩的控件世界
比較最常用的控件 一
- 控件View的通用屬性:寬高、顏色、邊距、是否可見(jiàn)、內(nèi)容居中、
點(diǎn)擊事件等 - TextView 顯示文本
- EditText 編輯框
- Button 點(diǎn)擊按鈕
- .9圖 一種可拉伸的圖:上左——拉伸,下右——填充。
比較最常用的控件 二
- ImageButton 圖片按鈕
- ImageView 圖片
- SeekBar 滑動(dòng)條
- RatingBar 評(píng)分條
- Progressbar 進(jìn)度條
比較最常用的控件 三
- WebView:加載網(wǎng)頁(yè)
- ListView:顯示列表
- GridView:顯示表格式列表
- ScrollView:內(nèi)容可滾動(dòng)視圖
- SufaceView:非常重要的繪圖容器
針對(duì)比較常用的控件一和Activity之間傳遞數(shù)據(jù)寫了一個(gè)小的demo。
打開(kāi)該app,首先是一個(gè)類似開(kāi)機(jī)界面的界面,停留一秒后,自動(dòng)跳轉(zhuǎn)到主界面。如下圖:
代碼:
public class SplashActiviy extends Activity {
private Handler mHandler;
private TextView mTvName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
mTvName = (TextView) findViewById(R.id.tv_name);
mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
String name = mTvName.getText().toString();
Intent intent = new Intent(SplashActiviy.this, MainActivity.class);
intent.putExtra("name", name);
startActivity(intent);
finish();
}
}, 1000);
}
}
這里界面的自動(dòng)跳轉(zhuǎn)用到了Handler的postDelayed方法,Activity間傳遞數(shù)據(jù)用到了Intent的putExtra方法,并用startActivity實(shí)現(xiàn)跳轉(zhuǎn),最后利用finish將該界面關(guān)閉。
進(jìn)入主界面,有兩個(gè)按鈕,一個(gè)TextView,一個(gè)按鈕是進(jìn)入買書(shū)界面,點(diǎn)擊該按鈕將會(huì)跳轉(zhuǎn)到買書(shū)界面,您要買的書(shū)后面是一個(gè)TextView,在買書(shū)界面輸入書(shū)名后,提交,會(huì)把輸入的書(shū)名返回給該界面,另一個(gè)按鈕是重置,點(diǎn)擊該按鈕,您要買的書(shū)就會(huì)被重置為空。如下圖:
代碼:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private TextView mTvHelloName;
private Button mBtnBuyBook;
private TextView mTvBookName;
private Button mBtnReset;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTvHelloName = (TextView) findViewById(R.id.tv_hello_name);
mBtnBuyBook = (Button) findViewById(R.id.btn_buy_book);
mTvBookName = (TextView) findViewById(R.id.tv_book_name);
mBtnReset = (Button) findViewById(R.id.btn_reset);
mBtnBuyBook.setOnClickListener(this);
mBtnReset.setOnClickListener(this);
Intent intent = getIntent();
if (intent != null) {
String name = intent.getStringExtra("name");
mTvHelloName.setText("Hello " + name);
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_buy_book:
Intent intent = new Intent(MainActivity.this, BuyBookActitivy.class);
startActivityForResult(intent, 0);
break;
case R.id.btn_reset:
mTvBookName.setText("");
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0 && resultCode == 1) {
String bookName = data.getStringExtra("bookname");
mTvBookName.setText(bookName);
}
}
}
由于用mBtnBuyBook打開(kāi)的界面要返回?cái)?shù)據(jù)給該界面,所以打開(kāi)買書(shū)界面應(yīng)該用startActivityForResult方法,并實(shí)現(xiàn)onActivityResult方法,當(dāng)打開(kāi)的界面由結(jié)果返回時(shí),調(diào)用該方法,并在這個(gè)方法里將返回的結(jié)果顯示出來(lái)。
進(jìn)入買書(shū)界面,有一個(gè)EditText用于輸入書(shū)名,點(diǎn)擊提交,將該書(shū)名返回給上一個(gè)界面,點(diǎn)擊取消按鈕,直接返回上一個(gè)界面。
代碼:
public class BuyBookActitivy extends AppCompatActivity implements View.OnClickListener{
private EditText mEtBookName;
private Button mBtnCommit;
private Button mBtnCancel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_buy_book);
setTitle("買書(shū)界面");
mEtBookName = (EditText) findViewById(R.id.et_book_name);
mBtnCommit = (Button) findViewById(R.id.btn_commit);
mBtnCancel = (Button) findViewById(R.id.btn_cancel);
mBtnCommit.setOnClickListener(this);
mBtnCancel.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_commit:
Intent intent = new Intent(BuyBookActitivy.this, MainActivity.class);
String bookName = mEtBookName.getText().toString();
if (!TextUtils.isEmpty(bookName)) {
intent.putExtra("bookname", bookName);
setResult(1, intent);
finish();
}else {
Toast.makeText(BuyBookActitivy.this, "書(shū)名不能為空", Toast.LENGTH_SHORT).show();
}
break;
case R.id.btn_cancel:
finish();
}
}
}
由于需要將輸入的書(shū)名返回給上一個(gè)界面,用Intent保存該書(shū)名,并利用setResult方法將該Intent返回給上一個(gè)界面,這樣就達(dá)到了返回?cái)?shù)據(jù)的目的。
點(diǎn)擊提交后,可以看到輸入的書(shū)名返回到了主界面。
Demo全部代碼放在了Github上,點(diǎn)擊進(jìn)入下載地址
Android Studio的一些快捷方式
- Ctrl + 鼠標(biāo)左鍵 / Ctrl + B:跳轉(zhuǎn)類或方法的定義
- Alt + Insert:生成代碼(如get,set方法,構(gòu)造函數(shù)等)
- Alt + 回車:導(dǎo)入包,自動(dòng)修正
- Ctrl + Alt + L:格式化代碼
- Ctrl + Shift + Space:自動(dòng)補(bǔ)全代碼
- Ctrl + Alt + Space:類名或接口名提示
- Ctrl + P:方法參數(shù)提示
- Ctrl + Shift + Alt + N:查找類中的方法或變量
- Ctrl + H:顯示類結(jié)構(gòu)圖
- Ctrl + D:復(fù)制行
- Ctrl + Q:顯示注釋文檔
- Alt + Up / Down:在方法間快速移動(dòng)定位
- Ctrl + Shift + Up / Down:代碼向上/下移動(dòng)
- Ctrl + Shift + Backspace:可以跳轉(zhuǎn)到上次編輯的地方
- Ctrl + F12:可以顯示當(dāng)前文件的結(jié)構(gòu)
- Ctrl + Alt + C:將變量更改為常量
- Ctrl + Alt + F:提取全局變量