1. 程式人生 > >Android開發學習之路--Activity之初體驗

Android開發學習之路--Activity之初體驗

    環境也搭建好了,android系統也基本瞭解了,那麼接下來就可以開始學習android開發了,相信這麼學下去肯定可以把android開發學習好的,再加上時而再溫故下linux下的知識,看看android原始碼,終有一天可以讓自己提高到另外一個高度。

    好了,言歸正傳,真正地開始android開發學習之路了。

    相信很多人都知道android四大元件,它們分別是活動(Activity),服務(Service),廣播接收器(Broadcast Receiver)和內容提供器(Content Provider)。這裡就先學習下第一個元件Activity。

    一個Activity就類似一個頁面,像開啟例如撥號、拍照、微信、看地圖等。每一個Activity被給予一個視窗,在上面可以繪製使用者介面。視窗通常充滿螢幕,但也可以小於螢幕而浮於其它視窗之上。

    一個應用程式包含了很多Activities,通常一個應用有一個Main Activity用來啟動的時候呈現給使用者的第一個介面,每一個Activity可以啟動另一個Activity,為了完成不同的功能。每一次一個Activity啟動後,前一餓Activity就停止了,但是系統保留Activity在一個棧上。當一個新的Activity啟動時,它會被推送到棧頂,取得使用者焦點,當用戶完成當前Activity然後點選了back按鈕,或者toolbar的回退按鈕的時候,它就被彈出棧,然後之前的Activity就恢復了。所以我們可以通過Activity的生命週期來實現一些需要的功能,建立,暫停,停止,銷燬等,這個在後面再研究。

    就像日曆app一樣如下圖就是兩個Activity,第一個是進入到的主介面的Activity,第二個設定的Activity了,當在第二個Activity的時候按back按鈕,那麼就會銷燬第二個Activity,從而恢復到第一個Activity了。

       

    講了這麼多原理,其實看得肯定聽不知所措的,不管這些了,下面還是在Android Studio下建立一個工程,然後實現簡單的Activity功能了,關於Activity還有很多需要學習研究的,後面再慢慢學習好了。

    開啟Android Studio軟體,然後新建工程,Application name就命名為ActivityStudy,點選next


    然後選擇sdk,這裡我的測試真機是android4.0.3的所以選擇了API15,接著點選next


    接著就是選擇Activity模板了,這個和ios的也有點像,估摸著是學習ios的吧,這裡選擇一個空的Empty Activity,點選next。

    接著就是設定Activity的名字以及layout的xml了。這裡命名為FirstActivity,layout命名為activity_first。點選Finish就完成了Activity 的建立了。


    然後進入工程如下圖:


    好了,工程建立完成了,主要和Activity相關的就是FirstActivity.java,AndroidManifest.xml和activity_first.xml了,這些都在篇博文Android開發學習之路--Android Studio專案目錄結構簡介做過簡單的介紹,這裡再描述下,當作溫故而知新了。

    首先FirstActivity.java,這裡繼承了AppCompatActivity,需要重寫onCreate方法,主要這裡只是個Empty Activity,所以也沒有什麼程式碼,setContentView函式呢,主要是實現mvc的v。m就是模組,很多程式碼可以抽象為模組;v就是檢視,也就是那個layout的xml,這裡就是activity_first.xml了,c是控制,這裡也類似於FirstActivity.java了,用來控制顯示。

package com.example.jared.activitystudy;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class FirstActivity extends AppCompatActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
}
}
    接著是activity_first.xml,這裡就不多做說明了,我們來新增一個button,button是view的一個widget。切換到Desin模式選擇Buton,拖到手機的介面當中去,然後切換回Text模式。


    看到了xml檔案中自動添加了一些程式碼,然後修改程式碼如下:


    其中android:id就是唯一識別符號,這個在程式碼中需要用到,match_parent主要是填充父view,wrap_content是包含內容。

    最後就是註冊AndroidManifest.xml了,這裡基本是都是自動生成的,其中有@mipmap/ic_launcher表示的是app的圖示。@string/app_name就是app顯示的名字,@style/AppTheme是app的主題。這裡用的@*符號主要的內容都在res下面。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.jared.activitystudy" >
    <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
        <activity android:name=".FirstActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
    其中res下面的mipmap

   

    res下面的strings.xml:

<resources>
    <string name="app_name">ActivityStudy</string>
</resources>
    res下面的styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>
    好了,基本的都已經介紹完了,那麼接下去就執行下看看效果了。點選執行按鈕,彈出了對話方塊,主要這裡我開啟了一個模擬器,又連線著真機,這裡選擇模擬器好截圖說明,真機的效果其實也一樣的。


    執行效果如下圖,有沒有覺得很奇怪,為什麼明明在button的android:text中既有大寫又有小些,為什麼這裡都變成了大寫了呢?

         

    解決上述辦法如下,在最後加上一行textAllCaps="false",執行如上圖所示。

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="FirstActivity Button 1"
android:id="@+id/button1"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:textAllCaps="false"/>
    至此,新建一個Activity,以及新增一個button等功能,相信都會操作了。

    很多app都不再顯示標題欄的,這裡怎麼隱藏掉app的標題欄呢?網上有傳統的方法就是在在setContentView上面加上如下程式碼:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_first);
}
    但是這裡繼承的不是Activity,而是繼承了AppCompatActivity,其中AppCompatActivity又繼承了Toolbar,所以上述程式碼編譯是沒有問題的,一旦執行就會出現異常的,那麼正確的做法是什麼呢?修改程式碼如下:
package com.example.jared.activitystudy;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class FirstActivity extends AppCompatActivity {

    @Overrid
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//requestWindowFeature(Window.FEATURE_NO_TITLE);
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
setContentView(R.layout.activity_first);
}
}

    再次執行,就有如下的顯示了,標題欄北隱藏掉了。

    

    好了,Activity先就學習到這裡了。接下去再學習別的內容了。