Android應(yīng)用界面開(kāi)發(fā)——簡(jiǎn)單控件和Activity間傳遞數(shù)據(jù)

剛剛注冊(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:提取全局變量
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,349評(píng)論 25 708
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程,因...
    小菜c閱讀 6,524評(píng)論 0 17
  • 【 Android四大組件之一 主要用于與用戶進(jìn)行交互,在一個(gè)App中可能存在零個(gè)或多個(gè)Activity 】 1....
    征程_Journey閱讀 1,973評(píng)論 0 4
  • 活動(dòng)依然無(wú)聊 不知道是不是自己狀態(tài)不好的原因 同行的一個(gè)小哥是鐵路局的 他說(shuō)其實(shí)這些安檢人員也特別不容易 不過(guò)聽(tīng)說(shuō)...
    角落蜷縮閱讀 173評(píng)論 0 0
  • 1,這個(gè)故事最打動(dòng)你的是哪個(gè)情節(jié)或哪句話? “也許后來(lái)我還會(huì)嘗試做許多事,但我一定會(huì)慎重對(duì)待。那些我愛(ài)的事物,我再...
    蔣冠楠閱讀 244評(píng)論 0 0