以下說明基于Android Studio,簡稱AS。(紅色字體為自行添加,注在醒目)
具體包括:
- 創建活動
- ? ? 創建項目
- ? ? 加載布局
- ? ? 在AndroidManifest文件中注冊
- 活動中使用(提醒)Toast
- 在活動使用(菜單)menu
- 銷毀活動
所謂活動(Activity):是一種包含用戶界面的組件,主要用于和用戶進行交互。
????????在Android Studio 內進行新建項目ActivityTest,項目報名默認為,com.example.ActivityTest,其余步驟默認即可。然后一個項目就創建完成。
- 手動創建活動:
? ? 步驟:創建項目(可以勾選Generate Layout File),假如此時已經創建好一個活動,及其對應的一個布局文件,然后默認重寫onCreate()方法,->? ? 布局文件已經創建好,編輯布局xml文件(比如可以添加一個Button,但是然后要在對應的Activity文件加載這個Button.)->所有的活動都要在AndroidManifest.xml中進行注冊才能進行生效,但是AS已經自動將活動在AndroidManifest.xml中注冊了->配置主活動,添加<action android:name="android.intent.action.MAIN" />以及?<category android:name="android.intent.category.LAUNCHER" />表示主活動。
????
????找到com.example.activity包右擊新建Empty Activity,活動命名為FirstActivity,不要勾選Generate Layout File(會自動創建一個對應的布局文件Layout,在res目錄的Layout目錄下) 和Launcher Activity(會自動設置為當前項目的主活動),但要勾選Backwards Compatibility 表示選擇向下兼容模式。然后完成創建。
????? ? 項目中的任何活動都應該重寫Activity的onCreate()方法,這一步驟AS會幫我們自動完成,默認實現。代碼如下:
package com.example.activitytest;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;public class FirstActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//調用了父類的onCreate()方法}
}
Android程序講究邏輯和視圖分離,最好每個活動對應一個布局,所謂布局是指用來顯示界面內容的,因為上一步沒有勾選Generate Layout File,所以我們要手動創建一個布局文件。右擊res目錄的layout的目錄,新建Layout resource file,命名為first_layout,根元素默認為LinearLayout(線性布局)。
????在first_layout.xml文件下,Text通過XML文件的方式來編輯布局的,點擊Text,看到如下代碼:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"></LinearLayout>
在創建布局時,選擇了以LinearLayout為根元素,因此現在布局文件中有了一個LinearLayout元素了,對布局文件進行編輯,添加一個按鈕,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/button_1"//當前元素的唯一標識符android:layout_width="wrap_content"//當前元素的寬度android:layout_height="match_parent" //當前元素的高度android:text="Button 1"/>//當前元素中顯示的文字內容
</LinearLayout>
一個按鈕就成功的顯示出來了。接下來我們在活動中加載這個布局,返回到FirstActivity,在onCreat()方法中加入代碼。
package com.example.activitytest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class FirstActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.first_layout);//調用了setContenView()方法來給當前的活動加載一個布局,而在setContentView()方法中,我們一般會傳入一個布局文件的id(項目中添加的任何資源都會在R文件中生成一個相應的資源id,只需要調用R.layout.first_layout就可以得到first_layout.xml布局的id)}
}
所有的活動都要在AndroidManifest.xml中進行注冊才能進行生效,而FirstActivity已經在AndroidManifest.xml中注冊過了,打開AndroidManifest.xml文件,如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.activitytest"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme">/* <activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>*/ 注釋符內先別在意。<activity android:name=".FirstActivity"></activity></application>
</manifest>
活動的注冊聲明要放<application>標簽內,這里時通過<activity>來對活動進行注冊。很明白:是AS自動完成了對FirstActivity的注冊。<activity>標簽中我們使用了android:name來指定具體注冊哪一個活動,這里填入.FirstActivity(com.example.activitytest.FirstActivity的縮寫)。這是由于最外層的<manifest>標簽中已經通過package屬性指定了程序的包名是com.example.activitytest。
? ? 不過,僅僅注冊了活動,程序是不能運行的,還沒有為程序配置主活動,程序運行先從主活動開始。配置主活動的方法是在<activity>標簽的內部加入<intent-filter>標簽,并在這個標簽中添加<action android:name="android.intent.action.MAIN" />以及<category android:name="android.intent.category.LAUNCHER" />這兩句的聲明即可。
這部分就是我們上面用注釋符/**/注解掉的部分。除此之外,我們還可以是使用android:lable指定活動中標題欄的內容,標題欄是顯示在活動最頂部的,給主動指定的lable不僅會成為標題欄的內容,還會成為啟動器(Launcher)中應用程序顯示的名稱。再次打開AndroidManifest.XML文件,代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.activitytest"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".FirstActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>
</manifest>
不出所料,現在程序無bug,已經可以開始運行。
- 在活動中使用Toast
? ? Toast是一種非常好的提醒方式,在程序中可以使用它將一些短小的消息通知給用戶,過一段時間會自動消失。在活動中使用Toast。首先定義一個彈出Toast觸發點,正好界面有一個按鈕,我們就讓點擊這個按鈕的時候彈出一個Toast吧,在onCreat()方法中添加如下代碼:
package com.example.activitytest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;public class FirstActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.first_activity);Button button1 = (Button)findViewById(R.id.button_1);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(FirstActivity.this,"You clicked Button 1",Toast.LENGTH_SHORT).show();}});}
}
????在活動中通過findViewById()方法獲取到在布局文件中定義的元素,這里傳入的為R.id.button_1,來得到這個按鈕的實例,這個值是在first_layout.xml中通過android:id指定的。findViewById()方法返回是一個View對象,我們將它向下轉型為Button對象。得到按鈕對象實例后,通過調用setOnClickListener()方法為按鈕注冊一個監聽器,點擊按鈕就會執行監聽器中的onClick()方法。因此,彈出Toast的功能當然是在OnClick()中編輯。
????Toast的用法灰常簡單,用過靜態方法makeText()創建出一個Toast對象,然后調用show()將Toast顯示出來就可以了。
? ? makeText()方法需要傳入3個參數,第一個參數是Context,就是Toast要求的上下文,由于活動本身就是一個Context對象,因此這里這要傳入FirstActivity.this就行了。第二個參數是Toast顯示的內容。第三個參數是Toast顯示的時長,有兩個內置常量可以選擇Toast.LENGTH_SHORT和Toast.LENGTH_LONG。
重新運行,并點擊按鈕,如下圖:
- 在活動中使用menu
菜單(menu)作用節省空間。
右擊res目錄下new一個Directory,輸入文件名menu。然后右擊menu文件new一個Menu resource file 命名為main。點擊完成。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/add_item"android:title="Add"/><itemandroid:id="@+id/remove_item"android:title="Remove"/>
</menu>
這里創建了兩個菜單項,其中<item>標簽就是用來創建具體的菜單項,然后通過android:id給這個菜單項指定一個唯一的標識符,通過android:title給這個菜單項指定一個名稱。
然后回到FirstActivity來重寫onCreatOptionMenu()方法,重寫方法使用Ctrl+O,然后在onCreatOptionMenu()方法中編寫如下代碼:
public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main,menu);return true;
}
通過getMenuInflater()方法能夠得到MenuInflater對象,在調用它的inflate()方法,就可以給當前活動創建菜單了。inflate()方法接受兩個參數,第一個參數用于指定我們通過哪一個資源文件來創建菜單,這里傳入R.menu.main,可以理解為就是所在的目錄地址。第二個參數用于指定我們的菜單項將添加到哪一個Menu對象當中,這里直接使用onCreateOptionsMenu()方法中傳入的menu參數。然后給這個方法返回true,表示允許創建的菜單顯示出來,如果返回false,表示創建菜單無法顯示。
以上步驟,僅僅是讓菜單顯示出來,但是并不能真正的使用。因此還要定義菜單響應事件,在FirstActivity中重寫onOptionsItemSelected()方法,代碼如下:
public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()){case R.id.add_item:Toast.makeText(this,"You clicked 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;}
在onOptionsItemSelected()方法中,通過調用item.getItemId()來判斷我們點擊的是哪一個菜單項,然后給每一個菜單項一個邏輯處理,彈出一個Toast。運行之后,如下圖,
- 銷毀一個活動
如何銷毀一個活動呢?按一下back鍵就可以銷毀當前的活動了,也可以使用另一種方法,Activity類提供了一個finish()方法,在活動中調用一下這個方法就可以銷毀當前活動了。代碼如下:
button1.setOnclickListener(new View.OnClickListener){@overridepublic void onClick(View v){ finish(); }
}
注:此次一系列android 文章,均有參考郭霖書籍《第一行代碼》,再一次無法抑制對大牛的崇敬。