本文是學習過程記錄,包含頁面跳轉功能的實現,以及專案結構的初步理解。
建立新的Activity我們假設有兩個頁面,一個Main作為預設啟動頁面,上面有一個按鈕,點選可以跳轉到另一個home頁面。
新建名稱為app01的Empty Activity專案之後,留意底部狀態條提示,稍等gradle完成初始化。
在專案檔案列表右擊【app/java/com.xxx.app01】資料夾,依次選擇【New/Activity/Empty Activity】建立一個新的Activity。
在彈出的視窗中設定Activity Name為HomeActivity,下面的Layout Name自動變為activity_home,下面Source Langua選java。
這個操作實際上還會產生兩個效果:
在【app/mainifests/AndroidMainiFest.xml】中自動新增一行<activity android:name=".HomeActivity"></activity>,缺失這一行的話會出錯。在【app/res/layout】下面生成一個activity_home.xml介面檔案。我們可以開啟介面檔案activity_home.xml,在Design模式下,先從Palette面板拖拽一個【Layouts/LinearLayout】,再拖拽一個【TextView】到layout上面,修改下文字顯示這是第二個頁面。
注意程式碼中的<LinearLayout>只保留了三個屬性,並且width和height都設定成了match_parent,即橫豎向都是充滿頁面。如果我們要使它在邊緣留有邊距,可以使用android:layout_margin="8sp"或者android:padding="4sp"這樣的語法,注意打字時候不要輸入andro...,而是直接輸入paddi然後從下拉提示選擇即可。
注意使用Design預覽視窗左上角的眼睛,選Show system UI可以顯示畫面頂部的狀態條和標題欄。
很多屬性可以在Design介面中修改,如下圖所示,注意textView處於Linearlayout的子層,這樣組織是為了方便修改。
點選上圖中textView右側的黃色感嘆號,點選下面彈出的文字底部的【Fix】按鈕,彈出Extract Resource視窗。這是由於在按鈕中的文字不應直接使用文字,而應該使用變數,這是為了適配不同的語言,比如英文中按鈕是Start中文是開始,那麼應該用哪個呢?都不用!而是用一個叫btnLabel的變數,在英文系統中btnLabel='Start'中文系統中自動btnLabel='開始'。下面設定了一個home_welcome的變數,它預設值等於這是Home頁面!.
按鈕設定返回到activity_main.xml,新增一個linearLayout,裡面新增一個TextView和一個Button。可以在程式碼裡利用Margin和Padding調整邊距。我們設定按鈕的id為btn_go_home。
package com.zhyuzh.app01;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.View;public class MainActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onClick(View view) { }}
注意新增的implements View.OnClickListener這是讓這個頁面點選可被處理,它必須配合下面的onClick(View view)函式才行。注意這裡不用輸入@Override...只要輸入onClick(小寫on開頭)就能自動提示完成。
如何讓按鈕被點選時候執行這個onClick函式呢?當然我們可以從Design頁面中找到onClick下拉選單修改。但這裡我們不用這個方法,而是直接修改程式碼。
上面程式碼中的onCreate函式就是建立的時候就會執行的函式,我們在這裡新增下面的程式碼。
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btn_go_home).setOnClickListener(this);}
上面程式碼中setContentView(R.layout.activity_main)其實是和【res/layout/activity_main.xml】建立關聯。我們新加的findViewById是利用我們之前設定的按鈕id來獲取到按鈕,然後新增監聽器setOnClickListener(this)。
跳轉函式我們需要使用Intent意圖才能實現跳轉。換而言之,就是Android禁止我們直接向頁面跳轉,而是必須把頁面包裹成為一個Intent意圖才能跳。
修改onClick程式碼如下。
@Overridepublic void onClick(View view) { Intent go_home=new Intent(); go_home.setClass(this,HomeActivity.class); startActivity(go_home);}
儲存之後,在模擬器內執行程式碼,就可以預設開啟activity_main頁面佈局,點選按鈕跳轉到activity_home頁面。
如果有多個按鈕,分別跳轉到不同的頁面,怎麼辦?我們可以在onClick函式中使用switch分支,根據不同的按鈕的id執行不同的操作。程式碼如下所示:
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btn_go_home).setOnClickListener(this); findViewById(R.id.btn_go_category).setOnClickListener(this);}@Overridepublic void onClick(View view) { switch (view.getId()){ case R.id.btn_go_home: Intent go_to1=new Intent(); go_to1.setClass(this,HomeActivity.class); startActivity(go_to1); break; case R.id.btn_go_category: Intent go_to2=new Intent(); go_to2.setClass(this,CategoryActivity.class); startActivity(go_to2); break; }}
注意onCreate中也要新增findViewById(R.id.btn_go_category)...。注意switch每個case後面要有break終止。
修改Toolbar標題在onCreate中新增程式碼getSupportActionBar().setTitle("Welcome!");修改標題。完整一點如下:
ActionBar actionBar = getSupportActionBar();if(actionBar != null){ actionBar.setTitle("Main");}
所有元素居中
修改LinearLayout屬性,新增android:gravity="center_horizontal"屬性可以使所有元素居中。同樣android:gravity="center_vertical"可以實現頁面豎向居中。
重新命名檔案由於很多變數都依賴於檔名稱索引,所以在AndroidStudio中不能直接重新命名檔案,而應該使用右鍵【Refactor/Rename…】。