《第一行代碼——Android》郭霖著php
更多內容,歡迎訪問個人我的博客醒島java
一個Activity是一個應用程序組件,提供一個用戶界面,用戶能夠用來交互以完成某項任務,例如閱讀文本、點擊按鈕、看照片等。每個Activity被給予一個窗口,在上面能夠繪製用戶接口。窗口一般充滿屏幕,但也能夠小於屏幕而浮於其它窗口之上。一個應用程序中能夠包含零個或多個活動,但不包含任何活動的應用程序不多見,由於這樣用戶就沒法看到你的應用程序了。android
咱們如今來看看如何手動建立一個活動。在HelloWorld項目中,MainActivity這個活動是自動建立的,那如何手動建立活動呢?下面咱們一步一步來進行活動的建立。app
新建一個項目ActivityTest。設置好包名等選項後,點擊下一步。
ide
選擇相應設備和最小兼容SDK。
佈局
注意!在這一步的時候,咱們要選擇「Add No Activity」選項。這樣就不會自動建立活動了。點擊Finish。
ui
如今項目建立好了,咱們來看看Project目錄。
spa
在如圖所示的位置(這就是咱們建立項目時默認的包名)右擊,選擇New。在接下來的菜單裏能夠選擇Java Class或者直接選擇Activity來建立新的Activity。這裏我選擇了Java Class。以後,在新的文件裏寫上以下內容:code
public class FirstActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } }
能夠看到,onCreate()方法很是簡單,就是調用了父類的onCreate()方法。xml
在AndroidManifest文件中註冊。全部的活動都要在AndroidManifest.xml中進行註冊才能生效。咱們打開AndroidManifest.xml,在<application>標籤內添加以下代碼。
<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指定了元素中顯示的文字內容。
從新回到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便可。