前文中我們創建了一個非常簡單的應用,可以處理一些用戶的輸入。這個應用還只有一個Activity,要做更多的事這是不夠的。市面上只有一個Activity的應用不是沒有,但是真的不多。更多的都是多個Activity的應用。現在我們就來寫一個多個Activity的應用。
首先創建一個新的Activit。在某個package下右擊,會彈出一個菜單。在菜單中選擇New->Activity->Empty Activity。之后參考上文,填寫Activity名稱,其他內容保持不變。這第一個Activity就叫做LoginActivity。具體如下圖:
然后再建一個Activity叫做HomeActivity。這樣來模擬一個用戶在登錄頁面輸入登錄信息,驗證正確之后進入主頁面的過程。
布局
兩個Activity都建立好以后,咱們來app/res/layout/目錄下看看activity_login.xml和activity_home.xml兩個布局界面。首先是LoginActivity的布局。這個頁面需要一個輸入用戶名和密碼的輸入框和一個登錄按鈕。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_fifth_day"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.a31day.fifthDay.LoginActivity">
<EditText
android:id="@+id/username_edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="用戶名" />
<EditText
android:id="@+id/password_edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:hint="密碼" />
<Button
android:id="@+id/login_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="Login" />
</LinearLayout>
登錄頁面用的根布局是LinearLayout
這個在上文中也使用過,這是一個相對簡單的布局。LinearLayout
會根據控件在布局中的位置從上到下依次展示出來。所以,從上到下的視圖依次是用戶名、密碼和登錄按鈕。我們現在不需要更多的關心布局的問題。
在看HomeActivity的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_home"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.a31day.fifthDay.HomeActivity">
<TextView
android:id="@+id/home_textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30sp" />\
</LinearLayout>
這個頁面是相當的簡單啊。在這個布局有一個TextView
,這個是用來顯示文本內容的。這個TextView
中會顯示一個字符串Hello 某某某。這就一眼能看出來登錄成功,進入了主界面。
代碼
在代碼準備階段,首先獲取布局中的視圖:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
final EditText userNameEditText = (EditText)findViewById(R.id.username_edittext);
final EditText passwordEditText = (EditText)findViewById(R.id.password_edittext);
Button loginButton = (Button)findViewById(R.id.login_button);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 獲取用戶輸入的用戶名、密碼
String userName = userNameEditText.getText().toString();
String password = passwordEditText.getText().toString();
// 檢查用戶輸入的用戶名和密碼是否正確
// 如果檢查正確,跳轉到另外一個Activity
}
});
}
獲取視圖在上文有講過,關鍵是在布局的時候設定了視圖的ID,就是這句:android:id="@+id/activity_home"
。之后在代碼中通過ID獲取到視圖:findViewById(R.id.username_edittext)
。
獲取到視圖之后,需要做一個操作:強制類型轉換。因為拿到的視圖是一個通用的視圖,有一些功能不具備。所以還要這么一步:(EditText)findViewById(R.id.username_edittext)
。就是放在findViewById
這個方法前面的(EditText)
和(Button)
。有了這個東西以后視圖才能成為我們需要的可用的視圖。
然后才可以使用這句:String userName = userNameEditText.getText().toString();
獲取到用戶名,和后面的獲取密碼,和設置按鈕的點擊處理代碼。
跳轉到另外一個Activity
設定按鈕的點擊處理代碼的時候,我們暫時不用管用戶名、密碼檢驗的問題。假設輸入啥用戶名、密碼都是對的。然后就直接跳轉到另外一個Activity去。
Activity的跳轉是用Intent來完成的。Intent就是意圖的意思,一個Activity隊另一個Activity有意思了,就像跳過去。就是這么回事兒。所以,需要在Intent里指定好了是從哪個Activity 跳到另外的哪個Activity去。
Intent go = new Intent(LoginActivity.this, HomeActivity.class);
startActivity(go);
LoginActivity.this
就是指定Intent是從哪個Activity出發。HomeActivity.class
指定Intent跳轉去哪個Activity。這不就是登錄,登錄之后跳轉去主界面Activity么。就是這么用Intent的。最后startActivity
方法,并把Intent的實例做為參數傳入這個方法就可以完成跳轉到其他的Activity了。
完成的代碼:
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 獲取用戶輸入的用戶名、密碼
String userName = userNameEditText.getText().toString();
String password = passwordEditText.getText().toString();
// 檢查用戶輸入的用戶名和密碼是否正確
// 如果檢查正確,跳轉到另外一個Activity
Intent go = new Intent(LoginActivity.this, HomeActivity.class);
startActivity(go);
}
});
總結
Android應用的開發一般來說都是第一布局,第二代碼。布局寫完,在預覽中查看沒有問題,開始代碼處理界面的展示和處理用戶的輸入。
更具體的來概括一下:
- 在布局中使用的各種
TextView
,EditText
和Button
等視圖,如果需要在代碼中獲取并使用,就需要設定ID, 如:android:id="@+id/activity_home"
。 - 在代碼中使用視圖的時候通過方法
findViewById
取得視圖,并把類型轉化成布局里視圖對應的類型,如EditText userNameEditText = (EditText)findViewById(R.id.username_edittext);
。 - 給按鈕設置點擊處理代碼:
// 先拿到對應的視圖
Button loginButton = (Button)findViewById(R.id.login_button);
// 設定點擊處理代碼
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 按鈕點擊處理代碼在這里
}
});
- 跳轉Activity:
Intent go = new Intent(LoginActivity.this, HomeActivity.class);
startActivity(go);