Android程式設計-畫面的切換(1)
實務來說 ,Android程式會有數個畫面,每個畫面都是一個使用情境,透過Google找相關程式的 撰寫方法,大致上都得到一個方向:透過多個Activities, 以Intent方法來切換不同的Activity。
這種做法基本上是可行的, 只是使用此種方法切換Activity進而造成畫面切換時,可以觀察到畫面切換的過程中有一個非常明顯的停頓, 很 不自然。
依照我所使用的App經驗來看,我看到的畫面切換都非常的平順,加上不同activities間的參數傳遞也是一個頭痛的問題。因此之故,我開始 針對Android的畫面切換上窮碧落下黃泉式地找出心中所想要的畫面切換方式,做法如下:
做法的關鍵是我們不再使用setContentView(R.id.layout.activity_main)來帶出畫面,程式的作法是用LayoutInflater來 挖出畫面中的View,做法如下:
OnCreate 方法 程式碼:
這種做法基本上是可行的, 只是使用此種方法切換Activity進而造成畫面切換時,可以觀察到畫面切換的過程中有一個非常明顯的停頓, 很 不自然。
依照我所使用的App經驗來看,我看到的畫面切換都非常的平順,加上不同activities間的參數傳遞也是一個頭痛的問題。因此之故,我開始 針對Android的畫面切換上窮碧落下黃泉式地找出心中所想要的畫面切換方式,做法如下:
圖 1. 第一個畫面
圖2. 第二個畫面
做法的關鍵是我們不再使用setContentView(R.id.layout.activity_main)來帶出畫面,程式的作法是用LayoutInflater來 挖出畫面中的View,做法如下:
final View view1 = inflater.inflate(R.layout.activity_main, null);//找出第一個視窗
final View view2 = inflater.inflate(R.layout.main2, null);//找出第二個視窗
這2行程式把二個畫面的View分別找出來,一旦有 了View物件,setContentView的 另一個多載形式找入View物件被用上來:
setContentView(view1); //顯示第一個視窗
由於畫面的元件分佈在不同的View裏,因此,要抓取在不同View裏的物件方法如下:
Button button1 = (Button) view1.findViewById(R.id.button1);//找出View1中的按鈕
Button button2 = (Button) view2.findViewById(R.id.button2);//找出View2中的按鈕
程式中 切換畫面的做法:
setContentView(view2);//跳到第2個視窗
setContentView(view1);//跳到第1個視窗
OnCreate 方法 程式碼:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = getLayoutInflater();
final View view1 = inflater.inflate(R.layout.activity_main, null);//找出第一個視窗
final View view2 = inflater.inflate(R.layout.main2, null);//找出第二個視窗
setContentView(view1); //顯示第一個視窗
Button button1 = (Button) view1.findViewById(R.id.button1); //找出第一個視窗中的按鈕
button1.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
setContentView(view2);//按了之後跳到第2個視窗
}
});
Button button2 = (Button) view2.findViewById(R.id.button2);//找出第2個視窗中的按鈕
button2.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
setContentView(view1);//按了之後跳到第1個視窗
}
});
}
這樣的方法明顯地簡單許多,而且也不需要去修改AndroidManifest.xml這個檔。
二個畫面的xml檔:
[activity_main.xml]
二個畫面的xml檔:
[activity_main.xml]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/h1"
tools:context=".MainActivity" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:text="@string/b1" />
</RelativeLayout>
[main2.xml]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/h2"
tools:context=".MainActivity" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:text="@string/b2" />
</RelativeLayout>
Comments