1. 程式人生 > >Android學習筆記4:探究活動1

Android學習筆記4:探究活動1

《第一行程式碼——Android》郭霖著

活動(Activity)是什麼

一個Activity是一個應用程式元件,提供一個使用者介面,使用者可以用來互動以完成某項任務,例如閱讀文字、點選按鈕、看照片等。每一個Activity被給予一個視窗,在上面可以繪製使用者介面。視窗通常充滿螢幕,但也可以小於螢幕而浮於其它視窗之上。一個應用程式中可以包含零個或多個活動,但不包含任何活動的應用程式很少見,因為這樣使用者就無法看到你的應用程式了。

手動建立一個活動

我們現在來看看如何手動建立一個活動。在HelloWorld專案中,MainActivity這個活動是自動建立的,那如何手動建立活動呢?下面我們一步一步來進行活動的建立。

  • 新建一個專案ActivityTest。設定好包名等選項後,點選下一步。
    creat activitytest.PNG

  • 選擇相應裝置和最小相容SDK。
    creat activitytest1.PNG

  • 注意!在這一步的時候,我們要選擇“Add No Activity”選項。這樣就不會自動建立活動了。點選Finish。
    creat activitytest2.PNG

  • 現在專案建立好了,我們來看看Project目錄。
    create activity.PNG

在如圖所示的位置(這就是我們建立專案時預設的包名)右擊,選擇New。在接下來的選單裡可以選擇Java Class或者直接選擇Activity來建立新的Activity。這裡我選擇了Java Class。之後,在新的檔案裡寫上如下內容:

public class FirstActivity
extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } }

create activity1.PNG

可以看到,onCreate()方法非常簡單,就是呼叫了父類的onCreate()方法。

  • 在AndroidManifest檔案中註冊。所有的活動都要在AndroidManifest.xml中進行註冊才能生效。我們開啟AndroidManifest.xml,在標籤內新增如下程式碼。
<activity
android:name=".FirstActivity" android:label="This is FirstActivity" >
//若是主活動,這裡還會成為應用程式的名稱 <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>

這些語句的意思在Hello World程式解析中已經講過,在此就不再贅述。

添加布局檔案

上面我們已經建立了一個活動,可是這個活動是空的,下面我們來為這個活動添加布局(Layout)檔案。

  1. 開啟res目錄,你會發現並沒有layout目錄。這是因為new→Java Class時AS是不會自動生成layout目錄和檔案的。(如果你在上一步執行的是new→Activity操作,並勾選了“Generate Layout File”,layout目錄和對應的layout檔案就會存在了。)在res上右擊,選擇new→Android resource directory→name:layout,type:layout,set:main→OK。
    create layout3.PNG
  2. 右擊layout→new→Layout resource File→name:first_layout,root element:LinearLayout→OK。至此,layout檔案就建立好了。
    create layout1.PNG
  3. 下面我們來新增一個Button按鈕。在< LinearLayout >標籤內新增如下程式碼:
<Button
    android:id="@+id/button_1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Button 1"
/>

這裡我們添加了一個button元素,android:id是給當前元素新增一個唯一識別符號。我們在helloworld程式解析中有提到xml中可以引用資源的格式為@xxx/xxxxx,這裡的@+xxx/xxxxx則是在xml裡定義一個資源id的格式。android:layout_width指定了當前元素的寬度,match_parent表示讓當前元素和父元素一樣寬。ndroid:layout_height指定了當前元素的高度,這裡使用wrap_content,表示當前元素的高度只要能剛好包含裡面的內容。android:text指定了元素中顯示的文字內容。
create layout2.PNG
4. 重新回到FirstActivity,在onCreate()方法中加入如下程式碼:

setContentView(R.layout.first_layout);

setContentView()方法來給當前的活動載入一個佈局,而在setContentView()方法中,我們一般都會傳入一個佈局檔案的id。注意這裡我們使用的R,是com.example.activitytest包下的R檔案,Android SDK還會自動提供一個android包下的R檔案。
這時程式執行的效果如下所示:
activitytest result.PNG

隱藏標題欄和狀態列

書中的方法是在onCreate()方法中新增如下程式碼:

requestWindowFeature(Window.FEATURE_NO_TITLE);

而且要新增到setContentView語句前。但是我發現,這時程式執行的效果與前次沒有區別。這是怎麼回事?原來,我們的活動繼承自Activity,這樣的話是預設不顯示標題欄的。那如何在這種狀態下隱藏狀態列?在res目錄下開啟style.xml檔案,在其中新新增一個style:

<style name="FullScreenTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="android:windowFullscreen">true</item>
</style>

然後在AndroidManifest檔案中修改

android:theme="@style/FullScreenTheme"

可以選則在Application元素中使用,也可以給一個activity元素使用。效果如下:
Screenshot_2016-05-01-20-37-30[1].png

但是當你的活動繼承的不是Activity而是AppCompatActivity時,預設的顯示效果如下:
Screenshot_2016-05-01-20-45-30[1].png

狀態列和標題欄是都顯示出來的。
我們把theme改為FullScreenTheme時,狀態列隱藏了,可是標題欄沒有隱藏。我們修改剛剛寫的style如下:

<style name="FullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:windowFullscreen">true</item>
    </style>

這次標題欄狀態列就都隱藏了。
如果僅僅想要隱藏標題欄,僅僅修改AndroidManifest檔案中的android:theme值為@style/Theme.AppCompat.Light.NoActionBar即可。