Android 元件系列-----Activity初步

xiaoluo501395377發表於2013-10-26

在上篇博文講解了Android的Activity這個元件的啟動流程後,接下來我們就來看看我們的Activity與我們的佈局檔案的關係吧

我們先來看看一個最簡單的佈局檔案的內容:

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:textSize="50sp"
        android:background="#00DD00"
        android:text="@string/hello_world" />

</RelativeLayout>

在這個佈局檔案裡面,我們在裡面定義了一個TextView控制元件,這個控制元件就是文字內容的顯示,我們可以給其指定各種屬性,例如高度、寬度、背景色等。在佈局檔案配置好以後,我們來看看Activity物件裡面的onCreate()方法中的內容:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

我們看到 setContentView(R.layout.activity_main);這裡我們就是載入了我們指定的那個佈局檔案,當執行完這句話以後,佈局檔案裡定義的所有的控制元件都會被載入進來,並且生成對應的View物件,說到View物件,我們要知道,我們定義的所有的控制元件,例如TextView、Button等等,這些都是View物件的子類

我們知道,在佈局檔案被載入後,就會生成對應的控制元件物件,我們要如何在程式碼中得到該物件呢?可以通過 findViewById 這個方法,就可以根據ID找到我們需要的那個View物件了,例如我們要找到剛才的那個TextView物件:

    private TextView textView;


    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.textView);
        textView.setBackgroundColor(Color.GREEN);
   }

通過上面的 textView = (TextView) findViewById(R.id.textView);程式碼就可以得到我們佈局檔案中的TextView物件,因為所有的控制元件物件都是View的子類,而findViewById方法返回的是View型別的物件,所以我們這裡要對其進行向下型別轉換。在得到TextView這個物件後,我們就可以在java程式碼裡來設定其各個屬性。記住:在佈局檔案中能配置的內容,在java程式碼中也能設定,反之亦然

在瞭解了這些之後,我們再來學一個知識點: 監聽器,相信做過java開發的都知道監聽器的概念,所以這裡也就不闡述了。我們這裡要實現的是通過給一個Button控制元件註冊監聽器,來處理一些操作。

<LinearLayout 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"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="50sp"
        android:text="0" />
    
    <Button 
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="button" />

</LinearLayout>

這是我們的佈局檔案,裡面定義了一個TextView和一個Button,我們要做的就是當點選一下Button時,讓TextView的內容每次加1,當長按Button時,讓TextView的內容每次加2

public class MainActivity extends Activity
{
    private TextView textView;
    private Button button;
    private int count = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.textView);
        textView.setBackgroundColor(Color.GREEN);

        button = (Button) findViewById(R.id.button);
        // 給button物件註冊一個onClick監聽器
        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View arg0)
            {
                count++;
                textView.setText(count + "");
            }
        });
        //    給button註冊一個onLongClick監聽器
        button.setOnLongClickListener(new OnLongClickListener()
        {
            /**
             * 這個方法返回一個boolean值,如果返回true,則表示是一個長按的操作,會執行下面這個方法
             * 如果返回false,則表示是一個點選操作,會首先執行完下面的方法,然後再執行點選的方法
             */
            @Override
            public boolean onLongClick(View arg0)
            {
                count += 2;
                textView.setText(count+"");
                return true;
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

這個就是我們的Activity的程式碼,我們首先要獲得TextView和Button這個物件,通過findViewById就可以獲得,然後給button註冊兩個監聽器,一個是OnclickListener,另一個是OnLongClickListener,然後我們這裡通過匿名內部類來得到實現了這兩個介面的物件,實現了其抽象方法。這樣我們就可以在方法裡面實現我們需要的操作了。

相關文章