一、Activity是什么
Activity(活動)是最容易吸引用戶的地方,它是一種可以包含用戶界面的組件,主要用於和用戶進行交互。一個應用程序中應該包括零個或多個Activity。
二、Activity的基本用法
1、手動創建活動
(1)、重新創建一個項目,模板改成Add NoActivity
(2)、項目創建成功之后,仍然會默認使用Android模式的項目結構,這里我們手動改成Project模式。
右擊–》New–》Activity–》Empty Activity,會彈出這樣的一個框
(3)、這里跟之前創建程序差不多,需要注意的是不要勾選Generate Layout File和Launcher Activity這兩個選項
勾選Generate Layout File表示會自動為FirstActivity創建一個對應的布局文件,勾選Launcher Activity表示會自動將FirstActivity設置為當前項目的主活動。第一次使用不需要勾選。勾選Backward Compatibility表示會為項目啟用向下兼容的模式。
(4)、項目中的任何活動都需要重寫Activity中的onCreate()的方法,目前我們已經重寫了這個方法。這是由Android Studio自動幫我們完成的。代碼如下:
public class FirstActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
可以看到,onCreate()方法非常簡單,就是調用了父類的onCreate()方法。當然這只是默認的實現,后面我們還可以加上很多自己的邏輯。
2、創建和加載布局
Android程序的設計講究邏輯和視圖分離,最好每一個活動都能對應一個布局,布局就是用來顯示界面內容的,因此我們現在手動創建一個布局文件
(1)、右擊app/src/main/res目錄–》New–》Directory,會彈出一個新建目錄的窗口,這里先創建一個名weilayout的目錄,然后對着layout目錄右鍵–》Layout resource file,又會彈出一個新建布局資源文件的窗口。
(2)、上圖是Android Studio為我們提供的可視化布局編輯器,你可以在屏幕的中央區域預覽當前的布局。在窗口的最下方有2個切換卡,左邊是Design,右邊是Text。Design是當前的可視化布局編輯器,在這里你不僅可以預覽當前的布局,還可以通過拖放的方式編輯布局。而Text則是通過XML文件的方式來編輯布局
(3)、我們拖一個button控件到Design界面,然后在活動中加載這個布局。
回到FirstActivity界面,在onCreate()方法中加入如下代碼:
setContentView(R.layout.first_layout);
(4)、調用setContentView()方法來給當前的活動加載一個布局,而在setContentView()方法中,我們一般都會傳入一個布局文件的id(項目中添加任何的資源都會在R文件中生成一個相對應的資源id)。我們在代碼中引用文件只需要調用R.layout.first_layout就可以得到first_layout布局的id,然后在將這個傳入setContentView()方法中
3、在AndroidManifest文件中注冊
所有的活動都需要在AndroidManifest注冊才能生效,而實際上FirstActivity已經在AndroidManifest.xml中注冊過了,我們打開app/src/main/AndroidManifest.xml文件可以看到如下代碼:
可以看到,活動的注冊聲明都要放在
在
不過,僅僅是這樣注冊了活動,我們的程序仍然是不能運行的,因為還沒有為程序配置主活動,也就是說,當程序運行起來的時候,不知道首先要啟動那個活動。
添加主活動的方法:
(1)、在
(2)、使用android:label指定活動中標題欄的內容,標題欄是顯示在活動的最頂部的,運行的時候就會看到。需要注意的是:給主活動指定的label不僅會成為標題欄中的內容,還會成為啟動器(Launcher)中因公程序顯示的名稱。
修改后的AndroidManifest.xml文件,代碼如下所示:
<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"
android:label="This is FirstActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
這樣的話,FirstActivity就成為我們這個程序的主活動了,即點擊桌面應用程序圖標時應首先打開的就是這個活動。另外需要注意,如果你的應用程序中咩有聲明任何一個活動作為主活動,這個程序仍然是可以正常安裝的,只是你無法再啟動中看到或者打開這個程序。這種程序一般都是作為第三方服務供其他應用在內部進行調用的,如支付寶快捷支付服務。
4、在活動中使用Toast
Toast是Android系統提供的一種非常好的提醒方式,在程序中可以使用它將一些短小的信息通知給用戶,這些信息會在一段時間后自動消失,並且不會占用任何屏幕空間。
如何使用Toast
首先需要定義一個彈出Toast的觸發點,正好之前程序界面上有一個button,我們可以讓點擊這個按鈕的時候彈出一個Toast。在OnCreate()方法中添加如下代碼:
public class FirstActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button button1 = (Button) findViewById(R.id.button2);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(FirstActivity.this, "You clicked Button", Toast.LENGTH_SHORT).show();
}
});
}
}
在活動中,可以通過findViewById()方法獲取到在布局文件中定義的元素,這里我們傳入R.id.button2,來得到按鈕的實例,這個值是剛才在first_layout.xml中通過android:id
屬性指定的。findViewById()方法返回的是一個View對象,我們需要向下轉型將它轉成Button對象。得到那妞的實例之后,我們通過調用setOnClick()方法。因此,彈出Toast的功能當然是要在按鍵的單擊事件中去編寫。
Toast的用法非常簡單,通過靜態方法makeText()創建出一個Toast對象,然后調用show()將Toast顯示出來就可以了。
這里需要注意的是,makeText()方法需要傳入3個參數。
第一個參數是Context,也就是Toast要求的上下文,由於活動本身就是一個Context對象這里直接傳入FirstActivity.this即可。
第二個參數是Toast顯示的文本內容。
第三個參數是Toast顯示的時長,有兩個內置常量可以選擇Toast.LENGTH_SHORT和Toast.LENGTH_LONG。
5、在活動中使用Menu
(1)、首先在res目錄下新建一個menu文件夾,右擊res目錄–》New–》Directory,輸入文件夾名menu,點擊OK。然后在這個文件夾下再新建一個名叫main的菜單文件,右擊menu文件夾–》New–》Menu resource file
(2)、在main.xml中添加代碼:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/add_iten"
android:title="Add"/>
<item
android:id="@+id/remove_item"
android:title="Remove"/>
</menu>
這里我們創建2個菜單項,其中
(3)、重新回到FirstActivity中來重寫onCOptionMenu()方法,重寫方法可以使用ctrl+O快捷鍵
添加代碼:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu,menu);
return super.onCreateOptionsMenu(menu);
}
通過getMenuInflater()方法能夠得帶MenuInflater對象,再調用它的的inflate()方法就可以給當前活動創建菜單了。Inflate()方法接收2個參數,第一個參數用於指定我們通過哪一個資源文件來創建菜單,這里當然傳入R.menu.main。第二個參數用於指定我們的菜單項將添加到哪一個指定的Menu對象當中,這里直接使用onCreateOptionMenu()方法中傳入的menu參數。然后給這個方法返回ture,表示允許創建的菜單顯示出來。如果返回了false,創建的菜單將無法顯示。
(4)、當然,僅僅讓菜單顯示出來是不夠的,我們定義菜單不僅是為了看的,關鍵是要菜單真正可用才行,因此還要再定義菜單響應事件。在FirstActivity中重寫onOptionItemSelectd()方法:
代碼如下:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.add_iten:
Toast.makeText(this,"You Click Add",Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT ).show();
break;
default:
}
return true;
// return super.onOptionsItemSelected(item);
}
運行程序會看到標題欄多了一個三點的符號的,這就是菜單按鈕了
6、銷毀一個Activity
方法1:按一下Back鍵就可以銷毀當前的活動了。
方法2:在Activity類中提供了一個finish()方法,我們在活動中調用一下這個方法就可以銷毀當前的活動了
@Override
public void onClick(View v) {
finish(); //j結束當前活動
// Toast.makeText(FirstActivity.this, "You clicked Button", Toast.LENGTH_SHORT).show();
}
附件列表