Android程式設計-畫面的切換(1)

實務來說 ,Android程式會有數個畫面,每個畫面都是一個使用情境,透過Google找相關程式的 撰寫方法,大致上都得到一個方向:透過多個Activities, 以Intent方法來切換不同的Activity。

這種做法基本上是可行的, 只是使用此種方法切換Activity進而造成畫面切換時,可以觀察到畫面切換的過程中有一個非常明顯的停頓, 很 不自然。

依照我所使用的App經驗來看,我看到的畫面切換都非常的平順,加上不同activities間的參數傳遞也是一個頭痛的問題。因此之故,我開始 針對Android的畫面切換上窮碧落下黃泉式地找出心中所想要的畫面切換方式,做法如下:

圖 1. 第一個畫面

圖2. 第二個畫面 


做法的關鍵是我們不再使用setContentView(R.id.layout.activity_main)來帶出畫面,程式的作法是用LayoutInflater來 挖出畫面中的View,做法如下:

        final View view1 = inflater.inflate(R.layout.activity_mainnull);//找出第一個視窗
        final View view2 = inflater.inflate(R.layout.main2null);//找出第二個視窗
這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]

<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

Popular posts from this blog

Android-使用webview在V3版的Google地圖GPS定位