Android學習筆記4:探究活動1
《第一行程式碼——Android》郭霖著
活動(Activity)是什麼
一個Activity是一個應用程式元件,提供一個使用者介面,使用者可以用來互動以完成某項任務,例如閱讀文字、點選按鈕、看照片等。每一個Activity被給予一個視窗,在上面可以繪製使用者介面。視窗通常充滿螢幕,但也可以小於螢幕而浮於其它視窗之上。一個應用程式中可以包含零個或多個活動,但不包含任何活動的應用程式很少見,因為這樣使用者就無法看到你的應用程式了。
手動建立一個活動
我們現在來看看如何手動建立一個活動。在HelloWorld專案中,MainActivity這個活動是自動建立的,那如何手動建立活動呢?下面我們一步一步來進行活動的建立。
新建一個專案ActivityTest。設定好包名等選項後,點選下一步。
選擇相應裝置和最小相容SDK。
注意!在這一步的時候,我們要選擇“Add No Activity”選項。這樣就不會自動建立活動了。點選Finish。
- 現在專案建立好了,我們來看看Project目錄。
在如圖所示的位置(這就是我們建立專案時預設的包名)右擊,選擇New。在接下來的選單裡可以選擇Java Class或者直接選擇Activity來建立新的Activity。這裡我選擇了Java Class。之後,在新的檔案裡寫上如下內容:
public class FirstActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
可以看到,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)檔案。
- 開啟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。
- 右擊layout→new→Layout resource File→name:first_layout,root element:LinearLayout→OK。至此,layout檔案就建立好了。
- 下面我們來新增一個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指定了元素中顯示的文字內容。
4. 重新回到FirstActivity,在onCreate()方法中加入如下程式碼:
setContentView(R.layout.first_layout);
setContentView()方法來給當前的活動載入一個佈局,而在setContentView()方法中,我們一般都會傳入一個佈局檔案的id。注意這裡我們使用的R,是com.example.activitytest包下的R檔案,Android SDK還會自動提供一個android包下的R檔案。
這時程式執行的效果如下所示:
隱藏標題欄和狀態列
書中的方法是在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元素使用。效果如下:
但是當你的活動繼承的不是Activity而是AppCompatActivity時,預設的顯示效果如下:
狀態列和標題欄是都顯示出來的。
我們把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即可。