探究Activity(1)--Activity的基本用法


一、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自動幫我們完成的。代碼如下:

 
 
 
         
  1. public class FirstActivity extends AppCompatActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. }
  6. }

可以看到,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()方法中加入如下代碼:

 
 
 
         
  1. 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文件可以看到如下代碼:

可以看到,活動的注冊聲明都要放在 標簽內,這里通過 標簽來對活動進行注冊。那么是什么幫我們自動完成對FristActivity活動的注冊呢?當然是AndroidStudio了。之前使用Eclipse創建活動或其他系統組件的時,很多人都會忘記去AndroidManifest.xml注冊一下,從而導致程序運行崩潰。
標簽中我們使用了Android:name來指定具體注冊哪一個活動,那么這里填入的.FirstActivity是什么意思?其實這不過即使com.example.activity.FirstActivity的縮寫而已。由於最外層的 標簽中已經通過packet屬性指定了程序的包名是什com.example.Activitytest,因此在注冊活動時這一部分就可以省略了,直接使用.FirstActivity就可以了。
不過,僅僅是這樣注冊了活動,我們的程序仍然是不能運行的,因為還沒有為程序配置主活動,也就是說,當程序運行起來的時候,不知道首先要啟動那個活動。
添加主活動的方法:
(1)、在 標簽的內部加上 標簽,並在這個標簽里加上 這兩句聲明即可。
(2)、使用android:label指定活動中標題欄的內容,標題欄是顯示在活動的最頂部的,運行的時候就會看到。需要注意的是:給主活動指定的label不僅會成為標題欄中的內容,還會成為啟動器(Launcher)中因公程序顯示的名稱。

修改后的AndroidManifest.xml文件,代碼如下所示:

 
 
 
         
  1. <application
  2. android:allowBackup="true"
  3. android:icon="@mipmap/ic_launcher"
  4. android:label="@string/app_name"
  5. android:supportsRtl="true"
  6. android:theme="@style/AppTheme">
  7. <activity android:name=".FirstActivity"
  8. android:label="This is FirstActivity">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN"/>
  11. <category android:name="android.intent.category.LAUNCHER"/>
  12. </intent-filter>
  13. </activity>
  14. </application>
  15. </manifest>

這樣的話,FirstActivity就成為我們這個程序的主活動了,即點擊桌面應用程序圖標時應首先打開的就是這個活動。另外需要注意,如果你的應用程序中咩有聲明任何一個活動作為主活動,這個程序仍然是可以正常安裝的,只是你無法再啟動中看到或者打開這個程序。這種程序一般都是作為第三方服務供其他應用在內部進行調用的,如支付寶快捷支付服務。

4、在活動中使用Toast

Toast是Android系統提供的一種非常好的提醒方式,在程序中可以使用它將一些短小的信息通知給用戶,這些信息會在一段時間后自動消失,並且不會占用任何屏幕空間。

如何使用Toast

首先需要定義一個彈出Toast的觸發點,正好之前程序界面上有一個button,我們可以讓點擊這個按鈕的時候彈出一個Toast。在OnCreate()方法中添加如下代碼:

 
 
 
         
  1. public class FirstActivity extends AppCompatActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.first_layout);
  6. Button button1 = (Button) findViewById(R.id.button2);
  7. button1.setOnClickListener(new View.OnClickListener() {
  8. @Override
  9. public void onClick(View v) {
  10. Toast.makeText(FirstActivity.this, "You clicked Button", Toast.LENGTH_SHORT).show();
  11. }
  12. });
  13. }
  14. }

在活動中,可以通過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中添加代碼:

 
 
 
         
  1. <menu xmlns:android="http://schemas.android.com/apk/res/android">
  2. <item
  3. android:id="@+id/add_iten"
  4. android:title="Add"/>
  5. <item
  6. android:id="@+id/remove_item"
  7. android:title="Remove"/>
  8. </menu>

這里我們創建2個菜單項,其中 標簽就是用來創建具體的某一個菜單項,然后通過android:id給這個菜單項指定一個唯一的標識符,通過android:title給這個菜單項指定一個名稱。

(3)、重新回到FirstActivity中來重寫onCOptionMenu()方法,重寫方法可以使用ctrl+O快捷鍵


添加代碼:

 
 
 
         
  1. @Override
  2. public boolean onCreateOptionsMenu(Menu menu) {
  3. getMenuInflater().inflate(R.menu.menu,menu);
  4. return super.onCreateOptionsMenu(menu);
  5. }

通過getMenuInflater()方法能夠得帶MenuInflater對象,再調用它的的inflate()方法就可以給當前活動創建菜單了。Inflate()方法接收2個參數,第一個參數用於指定我們通過哪一個資源文件來創建菜單,這里當然傳入R.menu.main。第二個參數用於指定我們的菜單項將添加到哪一個指定的Menu對象當中,這里直接使用onCreateOptionMenu()方法中傳入的menu參數。然后給這個方法返回ture,表示允許創建的菜單顯示出來。如果返回了false,創建的菜單將無法顯示。

(4)、當然,僅僅讓菜單顯示出來是不夠的,我們定義菜單不僅是為了看的,關鍵是要菜單真正可用才行,因此還要再定義菜單響應事件。在FirstActivity中重寫onOptionItemSelectd()方法:


代碼如下:

 
 
 
         
  1. @Override
  2. public boolean onOptionsItemSelected(MenuItem item) {
  3. switch (item.getItemId()){
  4. case R.id.add_iten:
  5. Toast.makeText(this,"You Click Add",Toast.LENGTH_SHORT).show();
  6. break;
  7. case R.id.remove_item:
  8. Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT ).show();
  9. break;
  10. default:
  11. }
  12. return true;
  13. // return super.onOptionsItemSelected(item);
  14. }

運行程序會看到標題欄多了一個三點的符號的,這就是菜單按鈕了

6、銷毀一個Activity

方法1:按一下Back鍵就可以銷毀當前的活動了。

方法2:在Activity類中提供了一個finish()方法,我們在活動中調用一下這個方法就可以銷毀當前的活動了

 
 
 
         
  1. @Override
  2. public void onClick(View v) {
  3. finish(); //j結束當前活動
  4. // Toast.makeText(FirstActivity.this, "You clicked Button", Toast.LENGTH_SHORT).show();
  5. }




附件列表

     


    免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM